1

ビューのレンダリングには、次の 3 つの手順がこの順序であることがわかっています。

  1. 制約の更新
  2. レイアウト ビュー (ここでフレームの計算を取得します)
  3. 画面

カスタムボタンの高さを変更し、そのボタンに周囲のビューとの制約がある場合、その制約を更新してビューとの重複を避けるにはどうすればよいですか? コメント行が表示されますが、どれも機能しません。

class DynamicHeightButton: UIButton {

    override func layoutSubviews() {
        super.layoutSubviews()

        let size = (self.titleForState(UIControlState.Normal)! as NSString).boundingRectWithSize(CGSizeMake(self.bounds.size.width, CGFloat.max), options: NSStringDrawingOptions.UsesLineFragmentOrigin, attributes: [NSFontAttributeName : UIFont.systemFontOfSize(17)], context: nil)
        self.bounds.size.height = size.height + 8

        //viewController!.view.setNeedsUpdateConstraints()
        //self.setNeedsUpdateConstraints()
        //self.setNeedsLayout()
    }
}
4

1 に答える 1

1

Autolayout ビューのフレームを使用する場合は設定しないでください。代わりに、通常は「定数」プロパティである制約を調整する必要があります。

私の場合、ビューの高さを変更し、その過程で制約を破っています。

カスタム クラスに 3 行追加しました。

@IBOutlet weak var height: NSLayoutConstraint

self.bounds.size.height = size.height + 8
height.constant = size.height + 8
于 2014-09-16T13:01:54.340 に答える