我想在设备旋转时修改布局约束.

它确实有效,在willAnimateRotationToInterfaceOrientation年,我移除了所需的约束,并用其他约束替换它们,以获得正确的布局...

但也有问题,在旋转过程中,自动布局在调用willAnimateRotationToInterfaceOrientation之前就开始打破约束,所以当设备重新定向时,我们应该在哪里替换约束呢?

另一个问题是性能,经过几次旋转后,系统不再打破限制,但我的性能大幅下降,尤其是在纵向模式下...

推荐答案

willRotateToInterfaceOrientation:duration:中,将setNeedsUpdateConstraints发送到任何需要修改其约束的视图.

或者,创建一个UIView子类.在你的子类中,注册接收UIApplicationWillChangeStatusBarOrientationNotification.当你收到通知时,给自己发setNeedsUpdateConstraints.

这将在视图上设置needsUpdateConstraints标志.在系统执行布局(通过发送layoutSubviews条消息)之前,它会向设置了needsUpdateConstraints标志的任何视图发送updateConstraints条消息.这是您应该修改约束的地方.创建UIView子类并覆盖updateConstraints以更新约束.

Objective-c相关问答推荐

如何创建圆形按钮?

Xcode 的任何 ReSharper 类似功能?

如何在运行时向对象添加属性?

将 NSInteger 变量传递给 NSMutableDictionary 或 NSMutableArray

UISearchDisplayController 没有结果tableView?

为什么当我使其处于非活动状态时,弱 IBOutlet NSLayoutConstraint 变为 nil?

自动布局和按下时隐藏底栏

单元测试私有方法 - 目标 C

如果用户点击屏幕键盘,我如何关闭键盘?

Objective C 代码是否有 github markdown 语言标识符?

为什么我的 UIButton 的内部修饰事件没有被调用?

滚动后检测 UITableView 中的当前顶部单元格

在不导入自己的情况下播放系统声音

在 NSString 对象中查找子字符串

主队列上的 dispatch_sync 与 dispatch_async

在 32 位和 64 位架构上格式化 NS(U)Integer 时类型转换的替代方法?

如何在 Xcode 7 中启用_BITCODE?

如何在没有死锁的情况下同步调度主队列?

判断 UIViewController 是否即将从导航堆栈中弹出?

Xcode 如何加载主情节提要?