在InterfaceBuilder中启用/禁用NSLayoutConstraints

NSLayoutConstraint (在iOS 8.0 )有一个名为activeBOOL属性,可以很容易地即时禁用/启用所述布局约束。

要为视图控制器创建第二个布局集,然后我可以以编程方式启用/禁用(通过两个集的NSLayoutConstraintsIBOutletCollection ),我将需要在接口构建器中禁用我已定义的布局约束。

让我在这里清楚我不想删除它们,只是禁用它们以便我可以设计第二组而不需要界面构建器一直抱怨不匹配的约束。 此外,切换大小类不是一种选择,因为布局集适用于同一个大小的类。

有没有选择吗?

提前致谢

马尔特

更多信息: SDK Version: 8.1 Deployment Target 8.0

在故事板中选择要禁用的约束, 选择Option + Command + 4以显示“属性”检查器,然后取消选择“已安装”。

我之前使用过Gabbler成功提供的解决方案,但最近我尝试使用Swift 2.0和Xcode 7做同样的事情,发现它不再有效。 正如人们所预料的那样,设置为未安装的约束根本没有安装,并且在打开或关闭时对布局没有影响。

我对该问题的解决方案是确保所有约束都已安装,并使用键’active’添加用户定义的运行时属性,键入’boolean’和值’false’。

可以在Custom Class字段下的Identity Inspector中找到用户定义的运行时属性面板。

我在使用Xcode 8和Swift 3时没有收到任何警告的解决方案未选中Interface builder,Inspector选项卡上的Installed框:

“接口”构建器上的已安装框

然后创建IBOutlets并在viewDidLayoutSubviews()上以编程方式添加/删除它们

 view.removeConstraints([constraints to remove, ...]) view.addConstraints([constraints to add, ...]) 

确保首先删除约束,否则您将获得消息日志无法同时满足约束…