【问题标题】:Back button in NavigationBar move down after rotate back to portrait in iOS11导航栏中的后退按钮在iOS11中旋转回纵向后向下移动
【发布时间】:2018-03-06 10:26:39
【问题描述】:

当我将屏幕旋转到横向然后旋转回纵向时,后退按钮会以某种方式下拉。

原来是这样的。

不仅是后退按钮的标题,还有图片下拉菜单。 我试图在旋转之前通过后退按钮的框架设置框架,但它不起作用。 我确定后退按钮的自定义图像无关紧要。

连线的事情是我打开了一个新的测试项目来重现这种情况,但它工作得很好。 我从故事板检查了导航控制器中的每个设置

或在导航栏中设置

它们与我原来的项目都是一样的。 我错过了什么?

此下拉菜单仅在 iOS11 中出现。

会不会是iOS11的bug?

请帮忙。谢了

附言我正在使用 Xcode9.2

【问题讨论】:

  • 所以我在 6s、7 和 8 上得到这个,但不是 6s plus、7 plus 或 8 plus。我也无法在 iPad Pro(12.9 英寸 - 第 2 代)上使用它。在 6s、7 和 8 上,我只有在导航控制器之前有一个控制器时才能得到它。如果我将导航控制器设置为初始视图控制器,那么它在 6s、7. 和 8 上都可以正常工作。仅在 iOS 11 中 - 必须是一个错误
  • 您找到解决方案了吗?我看到我的应用中发生了同样的事情。
  • 遗憾的是没有。似乎是 iOS 11 中的错误
  • 为什么要创建自己的后退按钮?为什么不直接使用UINavigationController 默认创建的那个?
  • 这是默认的。

标签: ios swift3 ios11 xcode9


【解决方案1】:

似乎调用setNeedsLayout()(如建议的here)有效。

override func viewDidLayoutSubviews() {
    navigationController?.navigationBar.setNeedsLayout()
}

【讨论】:

  • 这将使应用程序布局处于无限循环中,即使在不需要时也是如此。另外,你没有打电话给super.viewDidLayoutSubviews()。他应该使用垂直中心约束来保持按钮居中。
  • 不会发生循环,因为它们是两个不同的对象:在我们的UIViewController 布局了它的子视图之后,UINavigationBar 将根据documentation 布局直到下一个更新周期。另外,我认为super.viewDidLayoutSubviews()不是必需的,因为根据documentation>每个子视图负责调整自己的布局。
猜你喜欢
  • 1970-01-01
  • 2013-12-23
  • 2018-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-01
  • 2015-11-30
相关资源
最近更新 更多