使用CGRectZero框架将UIView放置在UITableView的中间

时间:2010-04-02 10:18:57

标签: iphone uitableview center frame

我有一个UITableViewController视图,我用一个CGRectZero框架分配/ init的UITableView:

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

我想在tableView的中间添加一个视图(带有UIActivityIndi​​catorView和UILabel的加载视图),但我不知道如何定位它,因为我不知道tableView框架。

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)];

我使用CGRectZero框架初始化了我的tableView,因此可以在屏幕上显示整个位置(它确实如此),但我认为它的框架会更新或者其他东西。

有什么想法吗?谢谢!

3 个答案:

答案 0 :(得分:2)

我设法以编程方式估计帧。我没有提到我的tableView位于navigationBar和tabBar之间,所以这里是这个案例的代码:

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)];

上面发布的有关loadingView定位的代码就像魅力一样!

我打开更好的解决方案,当然

答案 1 :(得分:1)

您可以为LoadingView提供对其显示的视图的引用。然后当它即将被显示时,它可以检查它所代表的视图的框架以使该视图居中并匹配该视图并将其自身添加为TableView的超视图的子视图:

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

另一个选择是让LoadingView使用KVO监视UITableView的帧并相应地调整它自己的帧。

答案 2 :(得分:0)

如果您的View Controller是UITableViewController,那么表视图的框架与UIViewController的框架相同。

为什么不把它放在UIViewController视图的中心?

假设self是UITableViewController:

loadingView.center = self.view.center;