当设备旋转时如何更改自动布局约束?

4
我已在相应的视图控制器中将约束设置为IB中的IBOutlet。我在IB和storyboard中设置的这些约束值是针对纵向方向的。当设备更改为横向方向时,我需要更改这些约束,并在旋转回纵向方向时恢复它们。
我阅读了几篇关于在旋转设备时更新约束的文章,但每篇文章都说不同的事情,我不知道应该使用哪个过程和方法调用...我一直在Apple的文档中搜索有关Autolayout如何在编程时更改约束的内容,但没有找到任何信息。
我对autolayout知之甚少,我真的很迷惑...我希望能清楚地解释一下我应该如何处理这种情况。
提前感谢您。
2个回答

3
如果视图控制器是由窗口管理的控制器层级​​的一部分,UIViewController会接收到由UIDevice通知触发的几个与方向相关的调用。因此,您需要覆盖方法并在那里更新自动布局约束。
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
    if UIDevice.current.orientation.isLandscape {
        // Landscape
        constraintName.constant = 20.0  // constraintName will be your IBoutlet Constraint
    } else {
        // Portrait
        constraintName.constant = 100.0 // constraintName will be your IBoutlet Constraint
    }
}

希望这能解决你的问题。

-3

再次感谢。我的问题是我需要支持iPhone设备的iOS 7及以上版本,我已经有了一个只启用自动布局的故事板。这个故事板中大约有32个场景...在这个时候转移到尺寸类值得吗?考虑到我必须支持iOS 7。 - AppsDev
@AppsDev 转向尺寸类别支持只意味着为某些尺寸类别的某些屏幕更改特定约束条件。您无需重写所有约束条件,这非常好:-) 关于支持iOS7-统计数据将帮助您做出决策:https://david-smith.org/iosversionstats/ 和 https://mixpanel.com/trends/#report/ios_9 - Vitalii Gozhenko
关于支持iOS 7,我知道目前它并不值得,但这是我收到的要求...谢谢。 - AppsDev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接