为什么我的UITableview Y原点会根据TabBarController

时间:2015-07-03 14:48:59

标签: ios uitableview uitabbarcontroller xcode-storyboard

单击第一个屏幕上的按钮后,将向用户显示标签栏控制器中包含的视图控制器。视图控制器中有两个表视图,第一个是顶部静态表,另一个是下面的第二个表。标签栏控制器中的视图控制器不在“更多”显示内。如果我转到“更多”并选择一个视图控制器,则会显示视图,并按下顶部单元格。

如果我转到“更多”屏幕,单击编辑,并以任何方式移动视图控制器的顺序,通过“更多”显示正确显示控制器。离开“更多”部分后,不显示顶部表格单元格(顶部表格)。

对我而言,在UI或故事板中存在问题似乎是合理的,但是没有任何事情可以解决我的问题。我已尝试手动设置约束并使用建议的约束。

此示例项目位于https://github.com/propstm/NavigationStructureTest

Top two images are prior to modifying the order of view controllers in the tab bar controller.  The bottom two, after.

3 个答案:

答案 0 :(得分:3)

我只是更新了两个表VC中的约束,然后问题就不存在了。

top tableview constraints

bottom tableview constraints

答案 1 :(得分:2)

禁用大小类,并删除"垂直空间到顶部布局指南"的约束(top tableView),向超级视图添加引脚顶部空间可以解决问题。 也许这是Xcode的错误,请参阅this

答案 2 :(得分:0)

我认为它与TabBarController提供的“更多”控制器有关,它具有自己的导航控制器,并且您的故事板设置为将边缘扩展到顶部条之外。

虽然你试图隐藏导航栏,但我认为它是在错误的地方完成的,只有当项目出现在“更多”控制器中时才需要。它当前实现的方式混淆了顶部布局指南,这似乎是假设有两个顶部栏,即使其中一个被隐藏。

我能够以两种方式修复您的演示项目。通过以下任一方式:

1)更新故事板并关闭标签栏上的“延伸边缘”(并将标签栏和顶部栏设置为不透明):

enter image description here

OR

2)简化viewWillAppear / Disappear和viewDidAppear / Disappear方法并在标签栏中隐藏导航栏更多控制器:

- (void)viewDidAppear:(BOOL)animated{
    //self.navigationItem.backBarButtonItem.title = @"HOME";

    self.tabBarController.title = @"Entity List";

    //Pretty activity indicator
    [self.topTableView reloadData];
}

- (void)viewWillAppear:(BOOL)animated {
    if (self.navigationController == self.tabBarController.moreNavigationController) {
        [self.tabBarController.navigationController setNavigationBarHidden:YES];
    } else {
        [self.navigationController setNavigationBarHidden:NO];
    }
}

- (void)viewWillDisappear:(BOOL)animated {
    [self.navigationController.navigationBar setHidden:NO];
}

- (void)viewDidDisappear:(BOOL)animated {
}

这可确保顶部导航正确显示,而不会弄乱布局指南。