标签更改后导航栏下的表格视图
Posted
技术标签:
【中文标题】标签更改后导航栏下的表格视图【英文标题】:Table view under navigation bar after tab change 【发布时间】:2016-06-03 15:13:19 【问题描述】:我有一个带有两个选项卡的应用程序,每个选项卡都包含一个表格视图。整个包裹在一个 UINavigationController 中。这是我的故事板:
当我运行我的应用程序时,第一个选项卡正常:
但在第二个中,表格视图从导航栏下方开始:
更糟糕的是,当我从第二个选项卡旋转屏幕时,第二个选项卡现在可以了,但第一个选项卡不再可用,表格视图顶部有一个额外的边距:
如果我从第一个选项卡旋转回纵向,我会返回到初始状态(第一个选项卡正常,第二个选项卡在导航栏下开始显示表格视图)。其实每次旋转屏幕,旋转后显示的tab都是ok的,而另一个就不行了。
似乎我需要在选项卡更改后显示我的视图时做一些事情,而当屏幕旋转时似乎需要做一些事情,但它是什么??
编辑:我忘了提到我不想取消选中“扩展边缘:在顶部/底部栏下”复选框,因为我希望我的表格视图在导航栏和标签栏下滚动。
【问题讨论】:
是的,它肯定会工作,但是表格视图不会在导航栏下滚动,这是我不想要的。 我只能在 ios 8.x 模拟器上实现这一点。在 iOS 9.x 模拟器中它不会发生,所以它看起来可能是 Apple 已经修复的 iOS 错误。 哦,你是对的!我的目标是> = 8.x。您可以查看我的答案以获取 8 和 9 解决方案。 【参考方案1】:好的,我明白了:首先取消选中UITabBarController上的“调整滚动视图插图”,然后在每个UITableViewController上添加这段代码:
override func viewWillAppear(animated: Bool)
// Call super:
super.viewWillAppear(animated);
// Update the table view insets:
updateTableViewInsets();
override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator)
// Animate:
coordinator.animateAlongsideTransition( (UIViewControllerTransitionCoordinatorContext) -> Void in
// Update the table view insets:
self.updateTableViewInsets();
, completion: (UIViewControllerTransitionCoordinatorContext) -> Void in )
// Call super:
super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
private func updateTableViewInsets()
// Get the bars height:
let navigationBarHeight = self.navigationController!.navigationBar.frame.size.height;
let statusBarHeight = UIApplication.sharedApplication().statusBarFrame.size.height;
let tabBarHeight = self.tabBarController!.tabBar.frame.size.height;
// Create the insets:
let insets: UIEdgeInsets = UIEdgeInsetsMake(navigationBarHeight + statusBarHeight, 0, tabBarHeight, 0);
// Update the insets:
self.tableView.scrollIndicatorInsets = insets;
self.tableView.contentInset = insets;
现在我自己处理插图,一切都很顺利。不过,恕我直言,这应该是开箱即用的......
编辑:它在 iOS 9 上开箱即用,Apple 可能已经修复了这个错误。上面的代码适用于 iOS 8 和 9(可能更低,我没有尝试)。
【讨论】:
以上是关于标签更改后导航栏下的表格视图的主要内容,如果未能解决你的问题,请参考以下文章
iOS TableViewController 滚动离开状态栏下的内容和导航栏