新的NSLayoutConstraint
方法activateConstraints:
和deactivateConstraints:
似乎不能正确地使用IB创建的约束(它们可以正确地处理代码创建的约束)。我创建了一个简单的测试应用程序,其中包含一个带有两组约束的按钮。 一组已安装,具有centerX和centerY约束,而另一组未安装,具有顶部和左侧约束(常量为10)。按钮方法会切换这些约束集。以下是代码:
@interface ViewController ()
@property (strong, nonatomic) IBOutletCollection(NSLayoutConstraint) NSArray *uninstalledConstraints;
@property (strong, nonatomic) IBOutletCollection(NSLayoutConstraint) NSArray *installedConstraints;
@end
@implementation ViewController
- (IBAction)switchconstraints:(UIButton *)sender {
[NSLayoutConstraint deactivateConstraints:self.installedConstraints];
[NSLayoutConstraint activateConstraints:self.uninstalledConstraints];
}
-(void)viewWillLayoutSubviews {
NSLog(@"installed: %@ uninstalled: %@", ((NSLayoutConstraint *)self.installedConstraints[0]).active ? @"Active" : @"Inactive", ((NSLayoutConstraint *)self.uninstalledConstraints[0]).active ? @"Active" : @"Inactive");
}
当应用程序启动时,按钮位于其安装的约束定义的正确居中位置。在我执行按钮操作方法中的激活/停用后,按钮能够正确移动到新位置,但是当我将视图旋转到横向时,它会移回到最初定义的位置(尽管日志仍显示新激活设置为活动状态)。当我旋转回纵向时,按钮保持在其初始位置(居中于屏幕),现在日志显示初始的约束集合为活动状态,而我激活的那些则为非活动状态。问题是,这是一个错误,还是这些方法不能与IB定义的约束以这种方式工作?