当我开始学习没有故事板的开发时,我发现这篇教程是关于媒介的: https://medium.com/written-code/creating-uiviews-programmatically-in-swift-55f5d14502ae
它解释了,当构建自定义 UIView updateConstraints() 这样的方法
UIView
updateConstraints()
class MyCustomView: UIView { var shouldSetupConstraints = true init(){ super.init(frame: CGRect.zero) setupViews() // NOT HERE for constraints } ... override func updateConstraints() { if(shouldSetupConstraints) { // Setting Constraints HERE setViewsConstraints() shouldSetupConstraints = false } super.updateConstraints() } fileprivate func setViewsConstraints(){ // Adding constraints, nothing special here } }
在我苏醒之前,一切都很顺利 UITableViewCell 子类。我尝试在这里使用相同的方法,将约束放置在 updateConstraints
UITableViewCell
updateConstraints
class MyCustomCell: UITableViewCell { var shouldSetupConstraints = true init(){ super.init(frame: CGRect.zero) setupViews() setupViewsContraints() // Layout HERE for UITableViewCEll } }
所以我有点困惑什么时候应该使用第一种方法,什么时候不应该。这是我的问题 为什么以及何时我必须覆盖 updateCosntraints init
updateCosntraints
init
目的 updateConstraints setNeedsUpdateConstraints 而且没有必要实施它。可以按照在中所做的方式设置约束 init
setNeedsUpdateConstraints
在发生影响的更改后,立即更新约束几乎总是更干净、更容易的。例如,如果要更改约束以响应按钮点击,请直接在按钮操作方法中进行更改。 仅当在位更改约束太慢,或视图产生大量冗余更改时,才应替代此方法
在发生影响的更改后,立即更新约束几乎总是更干净、更容易的。例如,如果要更改约束以响应按钮点击,请直接在按钮操作方法中进行更改。
仅当在位更改约束太慢,或视图产生大量冗余更改时,才应替代此方法
您的实现应该是高效的,这意味着您不应该激活或停用内部约束 更新应变 . 我也发现了这个 article 有帮助。 希望这有帮助!
更新应变