iOS工具栏高度取决于初始方向
我在iPhone的底部UIToolbar上遇到了一些问题。条形图的高度似乎取决于导航到场景时的设备方向,并且在方向更改时不会更新iOS工具栏高度取决于初始方向,ios,swift,interface-builder,uitoolbar,Ios,Swift,Interface Builder,Uitoolbar,我在iPhone的底部UIToolbar上遇到了一些问题。条形图的高度似乎取决于导航到场景时的设备方向,并且在方向更改时不会更新 在纵向模式下导航到场景时,底部栏的高度为44。然后,当我转动手机(这里是iPhone XR)时,该条的高度仍然为44 当我以横向模式打开场景时,底部栏的高度为49,当我竖直手机时,底部栏的高度也保持在49 这可以通过简单的2场景应用程序轻松复制,例如: 起初,这并不是一个真正的问题-用户甚至不会注意到小的变化。但现在我在分割视图中使用底部栏。当最初以纵向方式打开时,
viewWillTransition(…)
重新绘制工具栏,并假设每个方向的默认尺寸
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
if let bBar = bottomBar { bBar.invalidateIntrinsicContentSize() }
}
这样,它应该适应未来的UI更改,并且我不会冒在应用程序审批中出现问题的风险(如果修改标准UI元素样式在这里是个问题的话)
更新:
我更喜欢JoelEsli的解决方案,尽管在某些情况下这可能是一个很好的替代方案,因此为了完整起见,我将其留在这里。您是手动将工具栏添加到视图中,还是使用navigationController来管理工具栏?我假设你这样做了,因为旋转时高度没有变化 导航控制器管理工具栏旋转时的高度。将以下内容添加到viewDidLoad()方法将显示navigationController的工具栏
navigationController?.setToolbarHidden(false, animated: false)
这种方法需要的代码比视图控制器管理工具栏时少一点(少一个方法,少一个出口)
以下是我用来检查工具栏在iPad和iPhone Max上是否正确显示的默认模板:
iPad Pro
iphonexsmax
iPad Air 2
iPhone8 Plus
方向改变时。。更新工具栏高度谢谢@Mocha。这可能是一条路。但是,正如我所说,我希望避免硬编码高度,因为这可能会导致其他问题。更可取的做法是使工具栏像任何其他标准元素一样,为每个方向假定其自然尺寸。我不确定,但我会认为这是预期的默认行为。因此,标准元素的默认尺寸并不取决于方向,而是取决于初始方向,这让我有点困惑。但编码高度并不难,因为它是基于工具栏高度的。是的,你是对的(对不起,我在之前的回复中有点误解了你的评论)。这是一种选择。如果你想补充你的答案,我很乐意给你评分并删除我的。无论如何,JoelEsli的答案更接近我想要的。没错,我手动添加了工具栏。这看起来不错,不像我想出的那样是一个骇客。我会试试,让你知道。非常感谢。我道歉。我这几天没来办公室。我会看看是否能在今天或最迟周末检查,然后标出答案。它看起来不错,非常受欢迎。这是美丽的作品,正是我所寻找的。感谢您的巨大努力,包括演示项目。