为什么我的 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 {
}
这可确保顶部导航正确显示,而不会弄乱布局指南。
单击第一个屏幕上的按钮后,用户将看到包含在选项卡栏控制器中的视图控制器。视图控制器中有两个 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 {
}
这可确保顶部导航正确显示,而不会弄乱布局指南。