Swift - intrinsicContentSize 未按时调用

Swift - intrinsicContentSize is not called on time

我的界面生成器中有以下结构:

MyCustomView
   StackView 
      Label
      TextField
      Label - is hidden
Button

按下按钮时,CustomView 的逻辑应该使底部标签出现,因此再次计算 IntrinsicContentSize。不幸的是,只有在单击第二个按钮后才能正确显示视图。

相关代码如下:

public class MyCustomView: UIView {

...

var subtitle: String! {
    didSet {
        subtitleLabel.isHidden = subtitle.isEmpty
        subtitleLabel.text = subtitle
        invalidateIntrinsicContentSize()
    }
}

....

override public var intrinsicContentSize: CGSize {
    stackView.layoutIfNeeded()
    return stackView.bounds.size
}

....

}

当取消隐藏其中一个 stackView 子视图时,我缺少的行是 stackView.setNeedsLayout()

所以这是工作 didSet:

var subtitle: String! {
    didSet {
        subtitleLabel.isHidden = subtitle.isEmpty
        subtitleLabel.text = subtitle
        stackView.setNeedsLayout()
        invalidateIntrinsicContentSize()
    }
}