Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/96.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS工具栏高度取决于初始方向_Ios_Swift_Interface Builder_Uitoolbar - Fatal编程技术网

iOS工具栏高度取决于初始方向

iOS工具栏高度取决于初始方向,ios,swift,interface-builder,uitoolbar,Ios,Swift,Interface Builder,Uitoolbar,我在iPhone的底部UIToolbar上遇到了一些问题。条形图的高度似乎取决于导航到场景时的设备方向,并且在方向更改时不会更新 在纵向模式下导航到场景时,底部栏的高度为44。然后,当我转动手机(这里是iPhone XR)时,该条的高度仍然为44 当我以横向模式打开场景时,底部栏的高度为49,当我竖直手机时,底部栏的高度也保持在49 这可以通过简单的2场景应用程序轻松复制,例如: 起初,这并不是一个真正的问题-用户甚至不会注意到小的变化。但现在我在分割视图中使用底部栏。当最初以纵向方式打开时,

我在iPhone的底部UIToolbar上遇到了一些问题。条形图的高度似乎取决于导航到场景时的设备方向,并且在方向更改时不会更新

  • 在纵向模式下导航到场景时,底部栏的高度为44。然后,当我转动手机(这里是iPhone XR)时,该条的高度仍然为44
  • 当我以横向模式打开场景时,底部栏的高度为49,当我竖直手机时,底部栏的高度也保持在49
  • 这可以通过简单的2场景应用程序轻松复制,例如:

    起初,这并不是一个真正的问题-用户甚至不会注意到小的变化。但现在我在分割视图中使用底部栏。当最初以纵向方式打开时,底部工具栏的高度为44。将手机转换为横向视图时,将打开具有自己的工具栏(49高)的详细视图。然后我有两个高度不同的工具栏,它们紧靠在一起,非常难看:

    因此,问题是我如何确保工具栏高度在方向更改时更新,或者高度始终不变(例如在电子邮件应用程序中)。我不想硬编码这个高度,期望它最终会在未来的iOS版本或不同的设备上让事情变得更糟

    我使用的是Xcode 10.1,在iOS 12.1.2的iPhone上运行该应用程序。

    我最初解决了这个问题(基于上面Mocha的评论),方法是覆盖
    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的答案更接近我想要的。没错,我手动添加了工具栏。这看起来不错,不像我想出的那样是一个骇客。我会试试,让你知道。非常感谢。我道歉。我这几天没来办公室。我会看看是否能在今天或最迟周末检查,然后标出答案。它看起来不错,非常受欢迎。这是美丽的作品,正是我所寻找的。感谢您的巨大努力,包括演示项目。