17

スクロールを必要とせずにすべてのテキストがテキストビューに収まるように、テキストビューのフォントのサイズを小さくする非推奨の方法を見つけようとしています。

メソッド 'sizeWithFont' は非推奨であり、ベスト プラクティスを確実にしたいのです。

助言がありますか?いいえ、代わりに UILabel を使用することはできません。テキストを上部に垂直に配置する必要がありますが、UILabel はこれを行いません。

これはiOS 7より前に機能しました:

CGFloat fontSize;
CGFloat minSize;
if([deviceType isEqualToString:@"iPad"] || [deviceType isEqualToString:@"iPad Simulator"]){
    fontSize = 40;
    minSize = 15;
}
else{
    fontSize = 18;
    minSize = 8;
}
while (fontSize > minSize)
{
    CGSize size = [quote sizeWithFont:[UIFont fontWithName:@"Interstate" size:fontSize] constrainedToSize:CGSizeMake(newView.frame.size.width, 10000)];

    if (size.height <= newView.frame.size.height) break;

    fontSize -= 1.0;
}
4

5 に答える 5

4

同じことをしなければなりませんでしたが、プログラムで AutoLayout 制約を追加しました ( NSLayoutConstraint)。制約のcontentSizeため、ほとんどの場合、UITextViewスクロールが正しくありませんでした:/それでも正しいフォントサイズを取得するためにUITextView、古き良き試行錯誤のテストを行い、それを通過させるために、新しいフォントサイズを作成することになりましたそこの。

かなりシンプルですが、すべてのように、思いつくだけです:)

NSInteger fontSize = 200;

UITextView *testTextView = [[UITextView alloc] init];
testTextView.text = self.myRealTextView.text;
testTextView.font = [UIFont fontWithName:@"AldotheApache" size:fontSize];
while ([testTextView sizeThatFits:(CGSizeMake(self.myRealTextView.frame.size.width, FLT_MAX))].height >= self.myRealTextView.frame.size.height ) {
    fontSize -= 0.5;
    testTextView.font = [UIFont fontWithName:@"AldotheApache" size:fontSize];
}

NSLog(@"Correct font size is: %ld",(long)fontSize);

self.myRealTextView.font = [UIFont fontWithName:@"AldotheApache" size:fontSize];
于 2016-03-21T21:55:07.867 に答える
1

UITextView は UIScrollView のサブクラスです -> テキストまたはフォントを textView に設定した後、スクロール可能な領域の contentSize を確認できます。

textView.text = quote;
do
{
    textView.font = [UIFont fontWithName:@"Interstate" size:fontSize];
    [textView layoutIfNeeded];
    if (textView.contentSize.height <= newView.frame.size.height) {
        break;
    }
    fontSize -= 1.0;
} while (fontSize >= minSize);

それはうまくいくはずです...おそらく[textView layoutIfNeeded]がなくてもうまくいくでしょう。

于 2014-05-21T20:01:49.100 に答える
0

スイフト 5+

    var fontSize = Font.Size.section.rawValue
    let minSize = Font.Size.large.rawValue

    while fontSize > minSize {
        let textViewSize = CGSize(width: textView.frame.size.width, height: textView.frame.size.height)
        let size = textView.sizeThatFits(textViewSize)

        if size.height <= textViewSize.height {
            break
        }

        fontSize -= 1.0
    }

    textView.font = Font.primary.of(size: fontSize)
于 2019-11-28T22:15:37.750 に答える