以编程方式禁用自动布局约束

The*_*ise 22 xcode swift

有没有任何编程方式来临时禁用自动布局约束?我不希望在一段时间内考虑这个约束,直到我再次需要它为止.

oya*_*lhi 38

在为iOS 8.0或更高版本开发时,只需在创建IBOutlet后使用isActiveproperty NSLayoutConstraint.

更新

  • 对于以下建议的出口有强烈的参考,谢谢你@rob mayoff.
  • 使用.isActive代替.active与Swift 4建议,谢谢@Mohit Singh.

你的手机将有以下出口:

@IBOutlet var photoBottomConstraint: NSLayoutConstraint!
Run Code Online (Sandbox Code Playgroud)

你会在以下方面访问约束willDisplayCell:

myCell.photoBottomConstraint.isActive = false
Run Code Online (Sandbox Code Playgroud)

当你再次需要它时:

myCell.photoBottomConstraint.isActive = true
Run Code Online (Sandbox Code Playgroud)

  • 如果您想稍后重新激活约束,你可能想申报出口`strong`(或刚刚离开过`weak`因为`strong`是默认值).当约束被禁用,意见不引用它了,如果你没有一个强引用它的地方,它会被释放和`weak`出口将被设为零. (21认同)
  • 在 **Swift 4** 中,`active` 已重命名为 `isActive` (2认同)

Yuc*_*ong 7

根据oyalhi的回答,还要指出,如果要使其处于非活动状态,则必须强烈引用约束:

@IBOutlet var photoBottomConstraint: NSLayoutConstraint!
Run Code Online (Sandbox Code Playgroud)

这不是很明显,但是如果你使用的是弱引用,photoBottomConstraint那么在这个电话之后可能是零:

myCell.photoBottomConstraint.active = false
Run Code Online (Sandbox Code Playgroud)