在InterfaceBuilder中启用/禁用NSLayoutConstraints

Mal*_*lte 14 xcode objective-c interface-builder ios autolayout

NSLayoutConstraint(in iOS 8.0)有一个BOOL被调用的属性active,可以很容易地即时禁用/启用所述布局约束.

要创建一个视图控制器,我可以然后以编程使能/禁止(经由第二布局组IBOutletCollectionNSLayoutConstraints两个套),我需要停用在界面生成器我已经定义布局约束.

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

有没有选择吗?

提前致谢

马尔特

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

gab*_*ler 27

在storyboard中选择要禁用的约束,使用Option+ Command+ 4显示Attributes Inspector,然后取消选择Installed.

  • 哇,谢谢你的工作,我真的虽然unchecking安装将使他们无法访问这个大小的类!非常感谢! (8认同)
  • 在Xcode 8中,您必须选中"使用特征变化"选项才能启用它. (2认同)
  • 然后你可以在代码中设置`isActive`属性来重新"安装"约束? (2认同)

Ash*_*Ash 13

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

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

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

  • 自从iOS9发布以来,使用UIStackView来处理元素必须出现和消失的布局通常更容易和更简洁. (2认同)

rgk*_*shi 5

我使用 Xcode 8 和 Swift 3 的解决方案没有收到任何警告,未选中界面生成器、检查器选项卡上的已安装框:

界面生成器上安装的框

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

view.removeConstraints([constraints to remove, ...])
view.addConstraints([constraints to add, ...])
Run Code Online (Sandbox Code Playgroud)

确保先删除约束,否则您将收到消息日志Unable tolattice Constraints...