2016-12-20 4 views
1

私はUIButtonのカスタムサブクラスを作成しましたので、余分なラベルを追加できます。このボタンがUIStackViewの場合、余分なラベルのサイズが正しく設定されていません。親ボタンに制約をプログラムで追加しようとしました。これはうまくいきましたが、壊れた制約警告のページがありました(少し誇張しています)。ボタンに最終サイズが割り当てられていることが分かっていれば、追加したラベルフレームを設定できます。UIButtonのフレームサイズが最終的に設定されるのはいつですか

すべての自動レイアウトの後にUIButtonのサイズが分かっているのはいつですか?

+0

でオーバーライドすることができますが、StackViewは、プロパティ値を埋めるチェックすることがありますか? – Adolfo

+1

ボタンのフレームは既知で、layoutSubviews()が呼び出されたときに使用できます。カスタムクラスでオーバーライドすることができます –

+0

ボタンをUIViewに追加すると設定されます。または 'viewDidLoad'で –

答えて

0

上記の私のコメントごとに、ボタンのフレームが知られているべきであるとlayoutSubviews()が呼び出されたときに使用できるように、これはカスタムクラス

0

viewDidLayoutSubViewsは最後に終了する方法です。自動レイアウトの制約を割り当てている間は、のRectという情報が正しく表示されます。これを使用して制約を設定できます。

0

これを試してください:次の方法で "print(" frame: "、button.frame、"メソッド名 ")"を入れてください。

のviewDidLoad

viewDidLayoutSubviews

viewWillLayoutSubviews

viewWillAppear

viewDidAppear

あなたはボタンの実際の最終フレームが最終的な呼び出しまでは起こらないことに気づくでしょうviewDidLayoutSubviews、次にviewDidAppear、そしてそのviewDidLayoutSubviewsが呼び出されます。その前の何回も、ボタンのタイトルラベルのサイズに応じてこのラベルのフォントのサイズを変更しようとすると、特に面倒です。

サイズ変更がスタックビューに表示されている場合は、UIViewをスタックビューにドラッグしてボタンを配置すると、ボタンがそのビューに拘束されます。

関連する問題