[解決済み] UILabel sizeToFitがautolayout ios6で動作しない。
2022-04-26 20:26:26
質問
高さがテキストに依存するUILabelをプログラムで(どのような方法で)設定すればよいのでしょうか? Storyboardとコードの組み合わせで設定しようとしていますが、うまくいきません。 みんなが勧めるのは
sizeToFit
を設定しながら
lineBreakMode
と
numberOfLines
. しかし、そのコードを
viewDidLoad:
,
viewDidAppear:
または
viewDidLayoutSubviews
うまく動作させることができません。 長いテキストに対してボックスを小さくしすぎて大きくならないか、大きくしすぎて縮まないかのどちらかです。
解決方法は?
ご注意ください ほとんどの場合 マットの解決策 は期待通りに機能します。しかし、もしそれがうまくいかない場合は、さらに読み進めてください。
ラベルの高さを自動的に変更するには、次のようにする必要があります。
- ラベルのレイアウト制約を設定する
- 高さの制約を低い優先度で設定します。ContentCompressionResistancePriorityよりも低い値である必要があります。
- NumberOfLines = 0 に設定します。
- ContentHuggingPriorityをラベルの高さの優先順位よりも高く設定します。
- ラベルのpreferredMaxLayoutWidthを設定します。この値はラベルが高さを計算するために使用されます。
例えば
self.descriptionLabel = [[UILabel alloc] init];
self.descriptionLabel.numberOfLines = 0;
self.descriptionLabel.lineBreakMode = NSLineBreakByWordWrapping;
self.descriptionLabel.preferredMaxLayoutWidth = 200;
[self.descriptionLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];
[self.descriptionLabel setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];
[self.descriptionLabel setTranslatesAutoresizingMaskIntoConstraints:NO];
[self addSubview:self.descriptionLabel];
NSArray* constrs = [NSLayoutConstraint constraintsWithVisualFormat:@"|-8-[descriptionLabel_]-8-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(descriptionLabel_)];
[self addConstraints:constrs];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-8-[descriptionLabel_]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(descriptionLabel_)]];
[self.descriptionLabel addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[descriptionLabel_(220@300)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(descriptionLabel_)]];
インターフェースビルダーを使う
-
4つのコンストレイントを設定します。高さの制約は必須です。
-
次に、ラベルの属性インスペクタで、行数を0に設定します。
-
ラベルのサイズインスペクタで、垂直方向のContentHuggingPriorityと垂直方向のContentCompressionResistancePriorityを大きくしてください。
-
高さ制限を選択し、編集します。
-
また、高さ制約の優先順位を下げる。
お楽しみください。:)
関連
-
クラッシュエラー libc++abi.dylib: NSException 型のキャッチできない例外で終了_allanGold のブログ - ProgrammerITS401
-
IOS8 Development Guide Error Thread 1: signal SIGABRT
-
[解決済み] UITableViewの選択を無効にするにはどうすればよいですか?
-
[解決済み] SwiftでStringを配列に分割する?
-
[解決済み] IBOutletsはARCのもとで強くなるべきか、弱くなるべきか?
-
[解決済み] コードサインエラーです。期限切れのプロファイルを削除した後、プロビジョニングプロファイルが見つからない
-
[解決済み] iOS 13でダークモードをオプトアウトすることは可能ですか?
-
[解決済み] Swift で HTTP リクエストを行うにはどうしたらいいですか?
-
[解決済み] iOS 11、Apple TV 4Kなどを搭載したXcode 9でワイヤレスデバッグを行う方法とは?
-
[解決済み] カスタムセルを使用せずにUITableViewCellでテキストを折り返す方法
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] UILabel 内のテキストを縦に上部に揃える
-
[解決済み] UITableViewの選択を無効にするにはどうすればよいですか?
-
[解決済み] UITextViewのプレースホルダー
-
[解決済み] UIViewController のビューが表示されているかどうかを確認する方法
-
[解決済み] SwiftでUIAlertViewを作成するにはどうしたらいいですか?
-
[解決済み] コードサインエラーです。期限切れのプロファイルを削除した後、プロビジョニングプロファイルが見つからない
-
[解決済み] UITextFieldの最大文字数を設定します。
-
[解決済み] NSNotificationCenterのaddObserver in Swift
-
[解決済み] Swift で HTTP リクエストを行うにはどうしたらいいですか?
-
[解決済み] UILabel - テキストに合うようにラベルを自動サイズ?