2010-04-02 11 views
3

J'ai un UITableViewController voir un UITableView que j'alloc/init avec un cadre de CGRectZero:Position un UIView au milieu d'un UITableView avec cadre CGRectZero

self.tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStyleGrouped]; 

Je veux ajouter une vue au milieu de la tableView (une vue de chargement avec un UIActivityIndicatorView et un UILabel), mais je ne sais pas comment le positionner, puisque je ne connais pas le frameView.

x = (self.tableview.frame.size.width - loadingView.frame.size.width)/2.0; 
y = (self.tableview.frame.size.height - loadingView.frame.size.height)/2.0; 
[loadingView setCenter:CGPointMake(x, y)]; 

Je n'init mon tableView avec cadre CGRectZero il peut prendre toute la place disponible à l'écran (ce qu'elle a fait), mais je pensais que son cadre mettrait à jour ou quelque chose.

Des idées? Merci !

Répondre

2

J'ai réussi à estimer à trame par programme. Je ne mentionnais que mon tableView était entre un navigationBar et un tabBar, voici donc le code pour ce cas:

CGFloat x = self.navigationController.view.frame.size.width; 
CGFloat y = self.navigationController.view.frame.size.height - 
      self.tabBarController.tabBar.frame.size.height; 

self.tableView = [[UITableViewController alloc] initWithFrame:CGRectMake(0.0, 0.0, x, y)]; 

Et le code affiché ci-dessus pour le positionnement du loadingView fonctionne comme un charme!

Je suis ouvert ton de meilleures solutions, bien sûr

0

Si votre View Controller est un UITableViewController alors le cadre de l'affichage du tableau est le même que le cadre du UIViewController. Pourquoi ne pas le mettre au centre de la vue du UIViewController?

En supposant que l'auto est le UITableViewController:

loadingView.center = self.view.center; 
1

Vous pouvez donner à votre LoadingView une référence à la vue, il doit apparaître sur. Puis, quand il est sur le point d'être montré, il peut vérifier le cadre de la vue qu'il représente au centre et correspondre à ce point de vue et s'ajouter au sous-vue de la superview de TableView:

- (void)show 
{ 
    self.center = targetView.center; 
    [[targetView superview] addSubview:self]; 
} 

Une autre option est d'avoir la LoadingView utilise KVO pour surveiller le cadre de UITableView et ajuster son propre cadre en conséquence.