是否有任何编程方式暂时禁用自动布局约束?我不希望在一段时间内考虑这个约束,直到我再次需要它为止。
答案 0 :(得分:35)
在为iOS 8.0或更高版本开发时,只需在创建IBOutlet后使用isActive
NSLayoutConstraint
属性。
已更新
您的手机将有以下渠道:
@IBOutlet var photoBottomConstraint: NSLayoutConstraint!
您可以访问willDisplayCell
中的约束,如:
myCell.photoBottomConstraint.isActive = false
当你再次需要它时:
myCell.photoBottomConstraint.isActive = true
答案 1 :(得分:7)
根据oyalhi的回答,还要指出如果你想让它不活跃,你必须强烈引用你的约束:
@IBOutlet var photoBottomConstraint: NSLayoutConstraint!
这不是明显的,但如果您使用的是弱引用,photoBottomConstraint
在此次通话后可能为零:
myCell.photoBottomConstraint.active = false
答案 2 :(得分:3)
您使用NSView
' s removeConstraint:
;如果您已在界面构建器中创建了约束,则可以通过IBOutlet
class MyView : NSView {
@IBOutlet var temporaryConstraint : NSLayoutConstraint!
var constraint : NSLayoutConstraint! = nil /* my strong link */
var constraintShowing : Bool
func awakeFromNib() {
constraint = temporaryConstraint
}
func toggleLayoutConstraint(sender : AnyObject) -> () {
if constraintShowing {
self.removeConstraint( constraint )
} else {
self.addConstraint( constraint )
}
constraintShowing = !constraintShowing
}
}
类似于我们曾经在{10.4}之前与NSTableColumns
进行过舞蹈的舞蹈。
你也可以做一个小控制器小工具
class ConstraintController {
var constraint : NSLayoutConstraint
var view : NSView
var show : Bool {
didSet {
if show {
view.addConstraint(constraint)
} else {
view.removeConstraint(constraint)
}
}
}
init (c : NSLayoutConstraint, inView : NSView) {
constraint = c
view = inView
show = true
}
}
class MyView : NSView {
@IBOutlet var temporaryConstraint : NSLayoutConstraint!
var control : ConstraintController? = nil
func awakeFromNib() -> () {
control = ConstraintController(temporaryConstraint, inView: self)
}
func show(sender : AnyObject!) -> () {
control!.show
}
func hide(sender : AnyObject!) -> () {
control!.hide
}
}
更多的线条,但可以说更容易理解,也不那么讨厌。