uiView 在 iOS10 的 ViewController 中未对齐,但不是 iOS11

Posted

技术标签:

【中文标题】uiView 在 iOS10 的 ViewController 中未对齐,但不是 iOS11【英文标题】:uiView misaligning inside ViewController for iOS10, but not iOS11 【发布时间】:2018-05-02 09:34:37 【问题描述】:

我最近开始使用 Swift 和 Xcode,我不确定为什么我的 viewcontroller 中主视图的底部约束在 ios 10 设备上向上移动,而它在 iOS11 上正常工作。 我有一个类似于另一个应用程序的东西,其中顶视图约束在 iOS10 中向下移动,但我设法通过覆盖 viewDidLayoutSubviews() 并重置低于 11 的设备的约束来修复它。

不幸的是,这个技巧这次似乎不起作用。如果我覆盖了底部约束,底部锚点会得到纠正,但顶部的锚点会被拉起,并且部分视图会被导航栏隐藏。 我一直在尝试通过以前的问题(其中大多数是针对顶部差距,我没有设法修改它们以解决我得到的底部差距)和谷歌找到解决方案,但没有运气。

为了清楚起见,我附上了问题的屏幕截图。左边是iOS11,右边是iOS10。

我尝试过的覆盖:

override func viewDidLayoutSubviews() 
    super.viewDidLayoutSubviews()
let margins = view.layoutMarginsGuide
        NSLayoutConstraint.activate([
            graphView.leadingAnchor.constraint(equalTo: margins.leadingAnchor),
            graphView.trailingAnchor.constraint(equalTo: margins.trailingAnchor)
            ])

    if #available(iOS 11, *) 
        // safe area constraints already set
     else 
        let standardSpacing: CGFloat = 0.0
        NSLayoutConstraint.activate([
            contentView.bottomAnchor.constraint(equalTo: bottomLayoutGuide.bottomAnchor, constant: standardSpacing)])
    

结果:

【问题讨论】:

【参考方案1】:

您需要在主视图中设置这 4 个约束

【讨论】:

我已将它们全部设置到安全区域。将顶部空间绑定到超级视图没有帮助

以上是关于uiView 在 iOS10 的 ViewController 中未对齐,但不是 iOS11的主要内容,如果未能解决你的问题,请参考以下文章

如何在真实设备上的 iOS 10 中将渐变应用到 UIView

添加 UIView 以覆盖整个 UITableViewCell 以及 iOS 10 中的附件视图

iOS 10 UILabels -> 1 UIView -> 循环动画

如何在真实设备上将Gradient应用于iOS 10中的UIView

iOS - UIView 动画的限制?

iOS 我的 UIView 在屏幕上可见吗?