代码之家  ›  专栏  ›  技术社区  ›  Crocobag

Swift编程UI-为什么/何时对自定义对象使用updateConstraint方法

  •  0
  • Crocobag  · 技术社区  · 7 年前

    当我开始学习没有故事板的开发时,我发现这篇教程是关于媒介的: https://medium.com/written-code/creating-uiviews-programmatically-in-swift-55f5d14502ae

    它解释了,当构建自定义 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

    class MyCustomCell: UITableViewCell {
    
        var shouldSetupConstraints = true
    
        init(){
            super.init(frame: CGRect.zero)
            setupViews()
            setupViewsContraints() 
            // Layout HERE for UITableViewCEll
        }
    }
    

    所以我有点困惑什么时候应该使用第一种方法,什么时候不应该。这是我的问题 为什么以及何时我必须覆盖 updateCosntraints init

    1 回复  |  直到 7 年前
        1
  •  1
  •   Community Mohan Dere    6 年前

    目的 updateConstraints setNeedsUpdateConstraints 而且没有必要实施它。可以按照在中所做的方式设置约束 init

    在发生影响的更改后,立即更新约束几乎总是更干净、更容易的。例如,如果要更改约束以响应按钮点击,请直接在按钮操作方法中进行更改。

    仅当在位更改约束太慢,或视图产生大量冗余更改时,才应替代此方法

    您的实现应该是高效的,这意味着您不应该激活或停用内部约束 更新应变 . 我也发现了这个 article 有帮助。 希望这有帮助!