标签更改后导航栏下的表格视图

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 滚动离开状态栏下的内容和导航栏

导航栏下的 UICollectionView,但标签栏下没有

iPhone:标签栏下的 UITableView 滚动

从导航栏下的第二个视图

如何在导航栏下隐藏搜索栏并在用户下拉表格视图时显示它?

iPhone:在导航栏下隐藏自定义视图