iPhone 中的 UITabbar 高度和显示在从横向旋转到纵向时不动态变化,反之亦然 iOS11

UITabbar height and display in iPhone not changing dynamically when rotating from landscape to portrait and vice versa iOS11

我在不使用 AutoLayout 的情况下添加 UITabBar,它在 iOS 10.3.1 之前工作正常。 iOS 11 中似乎有一个新特性,即 UITabBar 的高度在纵向模式下为 49,在横向模式下为 32(照片应用程序就是一个很好的例子)。现在,当我 运行 我的应用程序内置于 iOS11 时,如果我以横向模式启动我的应用程序,UITabBar 的高度从 32 开始,但当它旋转到纵向模式时,它保持在 32 并且图标变大并超出 TabBar 框架。当我以纵向模式启动我的应用程序时,TabBar 的高度从 49 的高度开始,并在旋转到纵向模式时保持不变(这是可以接受的)。

我尝试使用 AutoLayout 和约束来解决这个问题,但是我无法解决它。如果有人遇到这个问题,那将是一个很大的帮助。

这个问题似乎只发生在 iPhone 非 plus 设备上。

更新:使用下面的答案固定了高度,但在横向模式下,UITabBar 项目的文本和图标不是水平对齐的,而是在 iPhone X 中垂直对齐。

我遇到的问题与here

的问题类似

我遇到了这个问题,通过在选项卡栏上调用 invalidateIntrinsicContentSize(),然后在它的父视图上调用 updateConstraintsIfNeeded() 解决了这个问题。在我的例子中,我在一个动画块中调用了这两个,但是可以将它们中的一个或两个都移出它。

这对我有用 iOS 11.3.1

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()
    tabBar.invalidateIntrinsicContentSize()
}

在我的例子中,解决方案是添加一个导航控制器作为情节提要入口点,然后添加标签栏控制器作为导航控制器的根视图控制器。不知何故,问题是因为标签栏控制器是情节提要入口点。