[解決済み] autolayout を使ってサブビューが動的に変更された後にスーパービューをリサイズする
質問
このリサイズスーパービューのコツがどうしてもわかりません。
私は
UIView *superview
で、4つの
UILabels
. 2つは他の2つのヘッダーとして機能します。
4つのコンテンツはすべて、データベースから来る動的なものです。
SizeToFit
対
SizeThatFits:(CGSize)
対
UIView systemLayoutSizeFittingSize:
のどちらかを渡します。
UILayoutFittingCompressedSize
または
UILayoutFittingExpandedSize
.
プログラム的にautolayoutを使用しており、スーパービューの高さがダミーの数値と同じかそれ以上になるように設定しています。
どこで、どのように、これらの
SizeToFit
対
sizeThatFits:(CGSize)
対
UIView systemLayoutSizeFittingSize:
のどちらかを渡します。
UILayoutFittingCompressedSize
または
UILayoutFittingExpandedSize
. 私はここでスタック上の多くのヒントを読みましたが、結局何もありませんでした。
どこか特定の場所でスーパービューの制約を再計算する必要がありますか。そのコントローラクラスで高さを´@property`に設定し、それを削除して読み取ることができますか? 現在、私はすべての場所を配置し、さらにいくつかのことを試してみました。それでも、ダミーの高さとテキストが外に浮いた状態で、同じサイズの最終結果が得られます。サブビューにclipsToBoundを設定した後でも。
私は私の髪を掻いています... 助けてください。
どのように解決するには?
オートレイアウトを使用している場合、以下のようになります。
-
サブビューに固定幅および/または高さの制約を追加していないことを確認します (動的にサイズ調整したい寸法に依存します)。このアイデアは、各サブビューの固有のコンテンツ サイズがサブビューの高さを決定するようにすることです。
UILabel
には4つの自動的な暗黙の制約があり、ラベルのフレームを内部のすべてのテキストに適合するために必要な正確なサイズに維持しようとします(優先度は Required より低い)。 -
各ラベルのエッジが、互いのエッジとそのスーパービューに(Required priority制約で)硬く接続されていることを確認します。ラベルの1つが大きくなることを想像した場合、これは他のラベルにそのためのスペースを作ることを強制し、最も重要なことは、スーパー ビューも同様に拡大することを強制することを確認したいと思います。
-
サイズではなく、位置を設定するためにのみ、制約をスーパービューに追加します(少なくとも、動的にサイズ変更したい寸法ではありません)。内部制約を正しく設定した場合、そのエッジが何らかの方法でサブビューに接続されるため、そのサイズはすべてのサブビューのサイズによって決定されることを覚えておいてください。
これで終わりです。を呼び出す必要はありません。
sizeToFit
または
systemLayoutSizeFittingSize:
を実行するには、ビューをロードしてテキストを設定するだけです。システムレイアウトエンジンは、制約を解決するための計算を行います。(何かあれば
setNeedsLayout
を呼び出す必要があるかもしれませんが、これは必要ないでしょう)。
関連
-
[エラー処理】iOSのエラー、アーキテクチャx86_64の未定義シンボルについて
-
[解決済み] UIDevice uniqueIdentifierは非推奨 - どうしたらいいの?
-
[解決済み] iOS 13でダークモードをオプトアウトすることは可能ですか?
-
[解決済み] UIImageのサイズを変更する最も簡単な方法?
-
[解決済み] UITableView - トップにスクロールする
-
[解決済み] ファイルはユニバーサル(3スライス)ですが、iOSの静的ライブラリのための(n)ARMv7-sスライスエラーが含まれていない、どうにかして回避するには?
-
[解決済み] ビューを非表示にしたときに、オートレイアウトで他のビューを移動するには?
-
[解決済み】UIScrollView Scrollable Content Size Ambiguity
-
[解決済み】Xcode 6でAutoLayout制約を使用してアスペクトフィットの動作をエミュレートする
-
[解決済み] autolayoutですべてのサブビューに合うようにスーパービューのサイズを変更する方法?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
dyld: ライブラリがロードされていません。エラーの解決
-
[解決済み] キーボードがあるときに、UITextFieldを編集開始時に上に移動させるには?
-
[解決済み] performSelectorのセレクタが不明なため、リークが発生する可能性があります。
-
[解決済み] 制約条件の変更をアニメーションで表現するには?
-
[解決済み] SwiftでURLから画像を読み込む/ダウンロードする
-
[解決済み] インポート vs #インポート - iOS 7
-
[解決済み] iOSとWatchKitで画像のtintColorを変更する方法
-
[解決済み] UIViewの角丸とドロップシャドウ?
-
[解決済み] Swiftの配列を文字列に変換するには?
-
[解決済み] Cocoapods警告 - CocoaPodsがプロジェクトの基本構成を設定しなかった理由は、プロジェクトに既にカスタム構成が設定されているためです。