私はスタック内の2つのラベルと行を含む単純なクラスがあります。sizeThatFitsがUILabelで動作しないのはなぜですか?
class TestView: UIView
{
let label_A = UILabel()
let label_B = UILabel()
override init(frame: CGRect) { super.init(frame: frame); setup() }
required init?(coder aDecoder: NSCoder) { super.init(coder: aDecoder); setup() }
func setup()
{
let view_BG = UIView()
let view_LineH = UIView()
// Configure
view_BG.backgroundColor = .white
view_BG.layer.cornerRadius = 6
view_LineH.backgroundColor = .gray
label_A.numberOfLines = 0
label_A.backgroundColor = UIColor(red: 1, green: 0, blue: 0, alpha: 0.2)
label_A.textColor = .red
label_B.numberOfLines = 0
label_B.textColor = .blue
label_B.backgroundColor = UIColor(red: 0, green: 0, blue: 1, alpha: 0.2)
label_A.text = "TestA"
label_B.text = "Experiment with Swift standard library types and learn high-level concepts using visualizations and practical examples. Learn how the Swift standard library uses protocols and generics to express powerful constraints. Download the playground below to get started."
// Assemble
self.addSubview(view_BG)
view_BG.addSubview(label_A)
view_BG.addSubview(view_LineH)
view_BG.addSubview(label_B)
// Layout
view_BG.constrain_edges(to: self)
label_A.constrain_edges(to: view_BG, excludingEdge: .bottom)
label_B.constrain_edges(to: view_BG, excludingEdge: .top)
view_LineH.constrain_height(1)
view_LineH.constrain_left(to: view_BG)
view_LineH.constrain_right(to: view_BG)
view_LineH.constrain_topToBottom(of: label_A)
label_B.constrain_topToBottom(of: view_LineH)
}
}
私はsizeThatFitsを呼び出すと、それは私だけで背中の高さを吐く:
let v = TestView()
let s = v.sizeThatFits(CGSize(width: 200, height: 10000))
// s is (200, 10000)
どのように計算することができますが指定された幅を持つ所望の高さ?
それが作りますそれがあなたに戻ってくると感じます。 'TestView'のあなたのすべての制約は、すべて端に制約されます。しかし、あなたは 'TestView'のフレームをまだ設定していません。だから、内部のすべての不明なフレームサイズが与えられているどのようにそれらのすべてを含む正しいフレームサイズを決定することができますか?できません。 – TNguyen
次に、sizeThatFitsに* width *とa * height *を指定するポイントは何ですか?私が1つだけを指定していた場合は、あいまいです。 sizeThatFitsを呼び出す前に、v.frame = CGRect(x:0、y:0、width:columnWidth、height:100)のようなものを追加しても結果は同じです。 – GoldenJoe