我在使用iPhone底部的UIToolbar时遇到了一些麻烦。当我导航到场景时,条形的高度似乎取决于设备的方向,而当方向改变时,条形的高度不会更新。
最初,这并不是一个真正的问题-用户甚至不会注意到这个小小的变化。但是现在我在拆分视图中使用底部的栏。最初以纵向打开时,底部工具栏的高度为44。将手机变为横向时,将打开带有自己的工具栏(高49)的详细视图。然后,我有两个高度不同的工具栏彼此相邻,这非常丑陋:
所以问题是我如何确保工具栏的高度在方向更改时更新,或者高度始终是相同的(例如在电子邮件应用程序中)。我不想硬编码高度,以免最终会在将来的iOS版本或其他设备上使情况变得更糟。
我正在使用Xcode 10.1,并在装有iOS 12.1.2的iPhone上运行该应用程序。
答案 0 :(得分:1)
您是将工具栏手动添加到视图上还是正在使用navigationController管理工具栏?我假设您这样做了,因为旋转时高度没有变化。
导航控制器管理旋转时工具栏的高度。将以下内容添加到viewDidLoad()方法将显示navigationController的工具栏。
navigationController?.setToolbarHidden(false, animated: false)
与您的视图控制器管理工具栏相比,此方法所需的代码少(少一种方法,少一种出口)。
这是我用来检查工具栏是否在iPad和iPhone Max型号上正确显示的默认模板: https://github.com/joelesli/TBHeight/
答案 1 :(得分:0)
我最初通过覆盖viewWillTransition(...)
来重绘工具栏并假定每个方向的默认尺寸来解决它(基于上面的Mocha评论)。
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
if let bBar = bottomBar { bBar.invalidateIntrinsicContentSize() }
}
这样,它就可以适应将来的UI更改,并且我不冒险在应用程序审批中遇到麻烦(如果在这里修改标准UI元素样式会成为问题)。
更新: 我更喜欢JoelEsli的解决方案,尽管在某些情况下这可能是一个很好的选择,所以为了完整起见,我将其留在此处。