0
私のシナリオが`layoutSubviews`描画を実行すると、代わりにクロージャを使用してビューをサブクラス化しませんか?
class Button: UIButton {
override open func layoutSubviews() { // I cannot do this
super.layoutSubviews()
layer.cornerRadius = bounds.height/2
}
}
をサブクラスから私を防ぎ私のシナリオは定数と、このシナリオを使用してから私を防ぎます。そしていいえlayoutSubviews
をMyView
に上書きすることはできません。例に文脈を与えるだけです。私は(不可能?)何をしたいです
class MyView: UIView {
let buttonHeight: CGFloat = 50
lazy var button: UIButton = ...
func setupSubViews() { // I cannot do this either..
button.addConstraint(button.heightAnchor.constraint(equalToConstant: buttonHeight))
button.layer.cornerRadius = buttonHeight/2
}
}
。そして何私はMyView
でlayoutSubviews
をオーバーライドすることはできません、それは単なる一例にコンテキスト:
class MyView: UIView {
lazy var button: UIButton = ...
func setupSubViews() {
// desired solution, using some closure that will be run when layouting
button.whenLayout { button, boundsWhenLayout in
button.layer.cornerRadius = boundsWhenLayout.height/2
}
}
}
を与えることですが、私がやりたいことが何とか可能ですか?私は繰り返す、私はサブクラスも高さの定数を使用することはできません。 UIButtonを所有するview/viewcontrollerでlayoutSubviewを使用することはできません。私は一般的な解決策が必要です。
多分Objective-C メソッドswizzlingどういうわけか?それとも何らかの変換この程度
MyViewのlayoutSubviewsメソッドをオーバーライドし、そこでボタンを更新できます。 –
@UpholderOfTruth不明なことに申し訳ありません。私はそのビューにアクセスできない。私は文脈を与えるための単なる例でした。これまでどんなサブクラスも使用することはできません。私はlayoutSubviewsにアクセスすることなく変更を適用する能力を必要とする一般的な解決策が必要です。 – Sajjon
MyView(あなたの例)にアクセスできない場合、どのようにボタン自体にアクセスするのですか? –