在iOS的navigationController堆栈中隐藏tabBar时,视图显示在屏幕上后向下移动

在iOS的navigationController堆栈中隐藏tabBar时,视图显示在屏幕上后向下移动,ios,swift,ios9,tabbar,navigationcontroller,Ios,Swift,Ios9,Tabbar,Navigationcontroller,当按下新的viewController时,我试图隐藏选项卡栏。我通过勾选推入式故事板上的隐藏底部栏来实现这一点。问题是,被推到的新视图在向下移动到正确的位置之前,会立即显示其原始位置(就好像tabBar仍在那里一样) 搜索了一段时间后,我发现了一个类似的帖子: 不幸的是,选择新视图到底部布局指南的底部约束的解决方案。在iOS 9中,底部不再可用(它变灰)。我按照几个建议将底部约束设置为容器边距,但这无助于向下移动 有人找到解决这个问题的办法了吗?隐藏Tabbar控制器的几何图形似乎只有在推送转

当按下新的viewController时,我试图隐藏选项卡栏。我通过勾选推入式故事板上的隐藏底部栏来实现这一点。问题是,被推到的新视图在向下移动到正确的位置之前,会立即显示其原始位置(就好像tabBar仍在那里一样)

搜索了一段时间后,我发现了一个类似的帖子:

不幸的是,选择新视图到底部布局指南的底部约束的解决方案。在iOS 9中,底部不再可用(它变灰)。我按照几个建议将底部约束设置为容器边距,但这无助于向下移动


有人找到解决这个问题的办法了吗?隐藏Tabbar控制器的几何图形似乎只有在推送转换完成后才能识别。

在Xcode7中,您必须右键单击元素,在底部绘制一条线,直到弹出约束选择器。约束选择器

然后按ALT键,现在将获得所需的底部约束


结果是我的inputAccessoryView导致了奇怪的滚动行为。对我有效的解决方案是在覆盖中返回accessoryView之前添加view.layoutIfNeeded():

override var inputAccessoryView: UIView? {
     get {
        view.layoutIfNeeded()
        return accessoryView
     }
因此,对于这种特殊情况,如果需要将navigationController嵌入到tabBar控制器中,您可以将其推送到隐藏tabBar的viewController:

  • 选中推式情节提要上的隐藏底部栏

  • 将要显示的视图底部固定到容器底部(使用上面建议的方法,或只选择屏幕底部的固定图标,然后在底部约束上选择下拉箭头并固定到视图)

  • 最后,如果您使用的是inputAccessoryView,请在getter的覆盖中添加layoutifneedd(),正如我前面所做的那样


  • 隐藏推送Classic的viewDidLoad上的tabbar我通过添加self.tabBarController!尝试了这一点!。tabBar.hidden=在viewDidLoad中推送的viewController上为true。同样的情况也会发生。在使用XCode的iOS9中,有一种方法可以设置底部布局。我将发布一个与之相关的解决方案。是的,我也遇到过这个问题并尝试过,但它也不起作用。我仍然可以看到视线向下移动。您也可以使用故事板底部的pin工具并选择底部pin约束旁边的下拉箭头来完成所做的操作。在视图转换完成后,我仍然可以看到视图向下跳转。以前通过选择底部布局指南。底部我没有任何问题。使用您的解决方案和使用容器底部对我不起作用。事实上,我刚刚减慢了动画的速度,现在使用您的解决方案的不同之处在于,推送的viewController中显示的collectionView在显示时正在滚动,而不是已经滚动到底部。滚动现在是可见的,我不想看到。因此,要清楚,如果我将底部约束设置为底部布局指南,则视图显示已滚动且完全正确,只是在过渡完成后向下移动。如果我只是按照您的建议将底部约束更改为容器底部,则视图滚动将以可见方式在viewController的转换期间发生。我还应该提到,我要转换到的viewController包含和inputAccessoryView。如果我删除这个滚动效果消失,一切正常。因此,在输入accessoryView中使用底部容器约束会导致问题。