Xcode 9.1 で UILabel にオフセットされた背景を作成しようとしています。
@IBDesignable
UILabel を含む UIViewのサブクラスがあります。次の制約があります。
- label.centerX == self.centerX
- label.centerY == self.centerY
- 幅: 自己 == 1 x ラベル + オフセット; (通常オフセット - 20)
- 高さ: 自己 == マルチ x ラベル + 0; (通常マルチ - 1.3)
私もオーバーライドしましたintrinsicContentSize
:
override var intrinsicContentSize: CGSize {
get {
var size = self.label.intrinsicContentSize
size.width += offset
size.height *= self.mult
return size
}
}
コードをデバッグし、オーバーライドされたブレークポイントで停止する場合もありますintrinsicContentSize
が、ほとんどの場合、Interface Builder では、幅などの途方もなく大きな値が得られます20,000,010
。それらはかなりランダムですが、かなり大きいです。前回、Interface Builder は 10,000x10,000 の UIView しか作成できないと文句を言いました。
それ以外の場合、ビューのintrinsicContentSize.widthは0で、ビューのintrinsicContentSizeのプレースホルダーを設定しても役に立ちません。
他の迅速なファイルに移動して戻ってくると、変更される可能性があります。正しい値を示すこともありますが、ほとんどの場合、何か偽物です。
通常、最終的なレイアウトは私が意図したものであるため、実行時に機能しますが、このビューで Interface Builder を使用することはほとんどできません。
また、空のテキストまたは '.' のような 1 つの文字テキストで UILabel を初期化しようとしました。おそらくゼロフレームとnilテキストがこの動作を提供すると思ったので、フレーム(0,0,1,1)ですが、どちらも役に立たないようです。
Interface Builder で OffsetLabel を使用できるように、これを修正する方法はありますか? なぜこれが起こるのですか?