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

时间:2015-11-08 18:32:31

标签: ios rotation autolayout orientation nslayoutconstraint

我已将IB中的约束设置为相应视图控制器中的IBOutlet。我在IB和故事板中设置的此类约束的值是纵向方向。我需要在设备更改为横向时更改这些约束,并在再次漫游到纵向时恢复它们。

我已经阅读了几篇关于在旋转设备时更新约束的帖子,但每个帖子都说不同的内容,而且我不明白这些过程和方法调用应该是什么......我已经一直在搜索关于Autolayout的Apple文档,但我没有找到任何在旋转设备时以编程方式更改约束的方法。

我对autolayout知之甚少,而且我真的对此感到失望......我非常感谢我应该如何管理这种情况。

提前致谢

2 个答案:

答案 0 :(得分:3)

  

UIViewController接收多个与方向相关的调用   通过UIDevice通知,如果视图控制器是其中的一部分   由窗口管理的控制器层次结构。

所以基本上你必须覆盖方法并在那里更新autolayout约束。

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
    }
}

希望它能解决你的问题。

答案 1 :(得分:-2)

我相信,Interface Builder中的Size Classes是实现目标的最佳方式:

Link to good tutorial

Link to Apple's official docs