1

Xcode 9.1 で UILabel にオフセットされた背景を作成しようとしています。

@IBDesignableUILabel を含む UIViewのサブクラスがあります。次の制約があります。

  1. label.centerX == self.centerX
  2. label.centerY == self.centerY
  3. 幅: 自己 == 1 x ラベル + オフセット; (通常オフセット - 20)
  4. 高さ: 自己 == マルチ 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 しか作成できないと文句を言いました。

大きな値のスクリーンショット

Interface Builder の苦情

それ以外の場合、ビューのintrinsicContentSize.widthは0で、ビューのintrinsicContentSizeのプレースホルダーを設定しても役に立ちません。

他の迅速なファイルに移動して戻ってくると、変更される可能性があります。正しい値を示すこともありますが、ほとんどの場合、何か偽物です。

通常、最終的なレイアウトは私が意図したものであるため、実行時に機能しますが、このビューで Interface Builder を使用することはほとんどできません。

また、空のテキストまたは '.' のような 1 つの文字テキストで UILabel を初期化しようとしました。おそらくゼロフレームとnilテキストがこの動作を提供すると思ったので、フレーム(0,0,1,1)ですが、どちらも役に立たないようです。

Interface Builder で OffsetLabel を使用できるように、これを修正する方法はありますか? なぜこれが起こるのですか?

4

1 に答える 1

0

Xcode を再起動すると、しばらくは期待どおりに動作するようです。

于 2018-01-19T16:10:33.473 に答える