代码之家  ›  专栏  ›  技术社区  ›  Thomas Joulin

将uiView放置在具有cDirectZero帧的uiTableView的中间

  •  3
  • Thomas Joulin  · 技术社区  · 14 年前

    我有一个uiTableViewController视图,一个uiTableView,我用cDirectZero的帧分配/init:

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

    我想在TableView的中间添加一个视图(一个带有uiActivityIndicatorView和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)];
    

    我用cgritzero框架初始化了我的TableView,这样它就可以在屏幕上占据全部的位置(它确实做到了),但是我认为它的框架会更新或者其他什么。

    有什么想法吗?谢谢!

    3 回复  |  直到 14 年前
        1
  •  2
  •   Thomas Joulin    14 年前

    我设法用程序估算出框架。我没有提到我的TableView介于导航栏和选项卡之间,所以这里是这个案例的代码:

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

    上面发布的加载视图位置的代码很有魅力!

    当然,我对更好的解决方案持开放态度。

        2
  •  1
  •   John Haney    14 年前

    您可以给您的loadingView一个对它将要显示的视图的引用。然后,当它将要显示时,它可以检查它所表示的视图的框架是否居中,并匹配该视图,并将自己添加为TableView的SuperView的子视图:

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

    另一种选择是让loadingView使用kvo监视uiTableView的帧,并相应地调整它自己的帧。

        3
  •  0
  •   progrmr    14 年前

    如果视图控制器是uiTableViewController,则表视图的框架与uiViewController的框架相同。

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

    假设self是uiTableViewController:

    loadingView.center = self.view.center;