2

UITextField を使用して 1 行のテキスト フィールドを表示したいのですが、それを表示する前に、それを含む UICollectionViewCell の適切なサイズを知る必要があります。テキストは複数のフォント サイズのいずれかである可能性があり、快適に表示するには適切な高さを取得する必要があります。

テキストは事前にわかっていない (ユーザーが編集できる) ため、 と をダミー テキスト以外には使用できませんNSAttributedString。、 右?-size-boundingRectWithSize:options:context:

私の質問は次のとおりだと思います:一般的なタイポグラフィに関する経験則、または私が認識していない有用な API はありますか?それにより、Xpt でテキストを表示するには、 Ypx.

4

2 に答える 2

4

UITextFieldメソッドを実装しsizeThatFits:ます。したがって、テキスト フィールドのサイズを取得する最も信頼できる方法は、実際にテキスト フィールドを作成し、実際のテキスト フィールドを設定するように設定し、適切なサイズを尋ねることです。UITextFieldテキストではなくフォントに基づいてサイズが選択されるため、プレースホルダー テキストを指定する必要さえありません。

UITextField *dummy = [[UITextField alloc] init];
dummy.font = [UIFont systemFontOfSize:20];
dummy.borderStyle = UITextBorderStyleRoundedRect;
CGFloat requiredHeight = [dummy sizeThatFits:CGSizeMake(HUGE_VALF, HUGE_VALF)].height;
// requiredHeight == 30 in my test

展開ターゲットが iOS 6.0 以降の場合は、代わりに次のintrinsicContentSizeようにプロパティを使用できます。

CGFloat requiredHeight = dummy.intrinsicContentSize.height;
// requiredHeight == 30 in my test

sizeThatFits:iOS 6 でも機能しますintrinsicContentSizeが、少し理解しやすいことに注意してください。

于 2013-06-26T03:58:14.243 に答える
4

iOS は、borderStyle が RoundedRect の場合、常に 30 単位の高さを返します。カスタム フォントに必要な高さを計算する場合は、borderStyle を他の値に変更し、高さを計算して、borderStyle を元に戻す必要があります。

textField.borderStyle = UITextBorderStyle.None;
let sizeThatFits = textField.sizeThatFits(CGSize(width:textField.bounds.width, height: CGFloat.max));
textField.bounds.height = sizeThatFits.height;
textField.borderStyle = UITextBorderStyle.RoundedRect;
于 2016-04-12T09:34:06.137 に答える