我想在设备旋转时修改布局约束。
我的 UIViewController
由 2 个 UIViews
组成,横向对齐,
在纵向中,它们是垂直对齐的。
它确实有效,在 willAnimateRotationToInterfaceOrientation
中,我删除了所需的约束并用其他约束替换它们以获得正确的布局...
但是有问题,在旋转期间,自动布局在调用 willAnimateRotationToInterfaceOrientation
之前开始打破约束,那么当设备重新定向发生时,我们打算在哪里替换我们的约束?
另一个问题是性能,经过几次旋转后,系统不再打破限制,但我的性能下降很大,尤其是在纵向模式下...
最佳答案
在 willRotateToInterfaceOrientation:duration:
中,将 setNeedsUpdateConstraints
发送到任何需要修改其约束的 View 。
或者,创建一个 UIView
子类。在您的子类中,注册以接收 UIApplicationWillChangeStatusBarOrientationNotification
。当您收到通知时,向自己发送 setNeedsUpdateConstraints
。
这会在 View 上设置 needsUpdateConstraints
标志。在系统执行布局之前(通过发送 layoutSubviews
消息),它会向任何设置了 needsUpdateConstraints
标志的 View 发送 updateConstraints
消息。这是您应该修改约束的地方。创建一个 UIView
子类并覆盖 updateConstraints
以更新您的约束。
关于objective-c - iOS 在设备旋转时更改自动布局约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13739902/