[解決済み] オートレイアウト制約を使用しているときに、ビューの現在の幅と高さを取得するにはどうすればよいですか?
質問
私はframeプロパティについて話していません、なぜならそこからあなたはxibでビューのサイズを得ることができるからです。私は、ビューがその制約のためにサイズ変更されたときについて話しています(おそらく回転の後、またはイベントに応答して)。その現在の幅と高さを取得する方法はありますか?
私は、幅と高さの制約を探すために制約を反復してみましたが、それはあまりきれいではなく、内在する制約があるときに失敗します (2つを区別できないので)。また、それは実際に幅と高さの制約がある場合にのみ機能し、サイズ変更するために他の制約に依存する場合は機能しません。
なぜ、私にとってこれはとても難しいことなのでしょうか。ARG!
どのように解決するのですか?
答えは
[view layoutIfNeeded]
.
その理由は以下の通りです。
を検査することによって、ビューの現在の幅と高さを取得することができます。
view.bounds.size.width
と
view.bounds.size.height
(で遊んでいるのでなければ同等です)。
view.transform
).
もしあなたが欲しいものが既存の制約によって暗示される幅と高さであるならば、答えは、制約を手動で検査することではありません。代わりに、あなたがすべきことは、単に そのレイアウトを更新するように自動レイアウトに依頼する で、制約を解決して正しい解決策で view.bounds の値を更新し、それから view.bounds を検査します。
どのように自動レイアウトにレイアウトを更新するように依頼するのでしょうか。コール
[view setNeedsLayout]
を呼び出すと、自動レイアウトは実行ループの次のターンでレイアウトを更新します。
しかし
もし、すぐにレイアウトを更新して、すぐに新しい境界の値にアクセスできるようにしたい場合
をすぐにアクセスできるようにしたい場合は、現在の関数内または実行ループのターン前の別の時点で、を呼び出す必要があります。
[view setNeedsLayout]
と
[view layoutIfNeeded]
.
高さ/幅の制約を直接参照していない場合、どのように変更することができますか?"。
IB で制約を作成した場合、最良の解決策は、ビュー コントローラーまたはビューで IBOutlet を作成し、制約への直接の参照を持つようにすることです。コードで制約を作成した場合、それを作成した時点で、内部の弱いプロパティで参照を保持する必要があります。他の誰かが制約を作成した場合、ビュー上のview.constraintsプロパティ、および場合によってはビュー階層全体を調べ、重要なNSLayoutConstraintを見つけるロジックを実装することによって、それを見つける必要があります。これは、おそらく間違った方法です。なぜなら、その質問に対する簡単な答えが保証されていない場合、どの特定の制約が境界サイズを決定したかを効果的に判断する必要があるからです。最終的な境界値は、複数の優先順位などを持つ複数の制約の非常に複雑なシステムの解である可能性があり、単一の制約が最終値のquot;cause;quotでないようにすることができます。
関連
-
[解決済み] キーボードがあるときに、UITextFieldを編集開始時に上に移動させるには?
-
[解決済み] iOSのステータスバーの文字色を変更する方法
-
[解決済み] App Storeのアプリと連動させる方法
-
[解決済み] UIViewに角丸をつける
-
[解決済み] iOSで画面の幅と高さを取得する方法は?
-
[解決済み] NSOperationとGrand Central Dispatchの比較
-
[解決済み] iphoneアプリのベータテストはどのように行うのですか?
-
[解決済み] コア・データ エンティティの全インスタンスを削除する最短の方法
-
[解決済み】Xcode 6でAutoLayout制約を使用してアスペクトフィットの動作をエミュレートする
-
[解決済み] オートレイアウトの場合、CALayerのアンカーポイントを調整するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
libc++abi.dylib が NSException 型の捕捉できない例外で終了する理由 エラー
-
iOS classic error Undefined symbols for architecture XXX:
-
[解決済み] iOSのステータスバーの文字色を変更する方法
-
[解決済み] iPhone UITextField - プレースホルダーの文字色を変更する
-
[解決済み] UITableViewCell、スワイプ時に削除ボタンを表示させる
-
[解決済み] Swift で HTTP リクエストを行うにはどうしたらいいですか?
-
[解決済み] Swift 3でディスパッチキューを作成する方法
-
[解決済み] UITableView - トップにスクロールする
-
[解決済み] swiftで電子メールアドレスを検証する方法は?
-
[解決済み] Swiftで配列に要素を追加する