objective-c - iOS 在设备旋转时更改自动布局约束

标签 objective-c ios autolayout nslayoutconstraint

我想在设备旋转时修改布局约束。 我的 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/

相关文章:

ios - 约束动画只会向上移动,不会向下移动

ios - 从文件 IOS 中读取整数

ios - 我是否需要 ApplicationDelegate 函数中的 UIApplication* 应用程序?

ios - 在 iOS 上阅读短信

ios - 如何在 UITableView 按钮单击中快速获取特定行按钮标题

android - Xamarin PCL 与 SL 混淆

objective-c - 是否有必要 nil 分配的变量?

ios - 当栏位置为 UIBarPositionTopAttached 时,UIToolbar 阴影不会隐藏

ios - 以编程方式在 UIView 上设置 ViewController

ios - 带约束的移动 View