为什么我的 UITableview Y 原点会根据 TabBarController 中的位置发生变化

Why is my UITableview Y origin changing based upon the position in TabBarController

单击第一个屏幕上的按钮后,用户将看到包含在选项卡栏控制器中的视图控制器。视图控制器中有两个 table 视图,第一个是顶部静态 table 和第二个 table 就在下面。选项卡栏控制器中不在 "more" 内的视图控制器可以正确显示。如果我转到 "more" 和 select 视图控制器,则显示视图时顶部单元格被向下推。

如果我转到 "more" 屏幕,单击编辑,并以任何方式移动视图控制器的顺序,通过 "more" 显示的视图控制器将正确显示。离开 "more" 部分时,不会显示顶部 table 单元格(顶部 table)。

UI 或故事板中存在问题对我来说似乎是合理的,但是没有任何问题会跳到我面前。我已经尝试过手动设置约束和使用建议的约束。

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

我只是更新了两个Table VC中的约束,然后问题就没有了。

Disable Size类,删除"vertically space to top layout guide"的constraint(top tableView),添加pin top space到super view可以解决问题。 也许这是 Xcode 的错误,请参阅 this

我认为这与 TabBarController 提供的 "more" 控制器有关,该控制器具有自己的导航控制器,并且您的情节提要设置为将边缘延伸到顶部栏之外。

虽然您试图隐藏导航栏,但我认为它在错误的地方完成,并且只应在 "more" 控制器中显示该项目时才需要。它当前实现的方式混淆了顶部布局指南,假设有两个顶部栏,即使其中一个被隐藏,它似乎仍然存在。

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

1)更新故事板并关闭标签栏上的"extend edges"(并将标签栏和顶部栏设置为不透明):

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 {
}

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