0

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

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
}

....

}

在此处输入图像描述 在此处输入图像描述

4

1 回答 1

0

我缺少的那一行是stackView.setNeedsLayout()在取消隐藏 stackView 子视图之一时。

所以这是工作didSet

var subtitle: String! {
    didSet {
        subtitleLabel.isHidden = subtitle.isEmpty
        subtitleLabel.text = subtitle
        stackView.setNeedsLayout()
        invalidateIntrinsicContentSize()
    }
}
于 2021-06-12T20:05:08.027 回答