【问题标题】:UITabbar height and display in iPhone not changing dynamically when rotating from landscape to portrait and vice versa iOS11从横向旋转到纵向时,iPhone中的UITabbar高度和显示不会动态变化,反之亦然iOS11
【发布时间】:2017-09-21 16:39:41
【问题描述】:

我在不使用 AutoLayout 的情况下添加了 UITabBar,它在 iOS 10.3.1 之前工作正常。 iOS 11 中似乎有一个新功能,那就是 UITabBar 的纵向高度为 49,横向模式为 32(Photo App 就是一个很好的例子)。现在,当我运行我在 iOS11 中构建的应用程序时,如果我在横向模式下启动我的应用程序,UITabBar 的高度从 32 的高度开始,但是当它旋转到纵向模式时,它会保持在 32 并且图标变得更大并且边缘超出标签栏框架。当我以纵向模式启动我的应用程序时,TabBar 的高度从 49 的高度开始,并且在旋转到纵向模式时保持不变(这是可以接受的)。

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

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

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

我面临的问题类似于here的问题

【问题讨论】:

    标签: iphone autolayout uitabbar ios11


    【解决方案1】:

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

    【讨论】:

    • 这为我节省了几个小时,谢谢!我试图在 traitCollectionDidChange 中的动画块之外执行此操作,但从横向到纵向仍然会出现问题。最终我把它放在viewWillTransitionToSize:withTransitionCoordinator: 内的一个动画块中,animateAlongsideTransition:completion:
    • 使用上面的答案,高度是固定的,但是在横屏模式下,UITabBar 项目的文本和图标不是水平对齐,而是在 iPhone X 中垂直对齐。
    【解决方案2】:

    这对我有用 iOS 11.3.1

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

    【讨论】:

    • 使用下面的答案固定高度,但在横向模式下,UITabBar 项目的文本和图标不是水平对齐而是在 iPhone X 中垂直对齐。
    • @ErAcube 你找到解决这个问题的方法了吗(不显示紧凑的设计)?
    • @NathanBarreto 我还没有。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2012-04-04
      • 1970-01-01
      • 2022-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-08
      • 1970-01-01
      • 2023-03-05
      相关资源
      最近更新 更多