如何在 iPhone 4S Swift 上动态调整 UITextView 中的文本大小

How to dynamically resize text size in a UITextView on iPhone 4S Swift

我的应用显示了一个字符串数组,它通过按下按钮来循环访问。它在除 iPhone 4S 以外的所有设备上都能完美运行。问题是一些字符串元素太长无法放入 UITextView,您必须滚动才能阅读其余部分,这是我不想要的。

所以,我的问题是,当它不适合所有字符串元素时,如何动态收缩属性文本以适应受约束的 UITextView?

如果可行,请告诉我, 谢谢大家。

当您可以使用 UILabel 时,您为什么要使用 UITextViewUITextView 没有自动缩放 属性。使用 UILabel 您可以设置行数,它有 Autoshrink属性 ,您可以在其中设置 Minimum font scaleMinimum font size 这将相应地调整您的文本 UILabel 大小。或者只允许使用 UITextView.

滚动

在您的 textview 类别中使用它 class 以根据宽度调整字体大小。

-(BOOL)sizeFontToFit:(NSString*)aString minSize:(float)aMinFontSize maxSize:(float)aMaxFontSize 
{   
float fudgeFactor = 16.0;
float fontSize = aMaxFontSize;

self.font = [self.font fontWithSize:fontSize];

CGSize tallerSize = CGSizeMake(self.frame.size.width-fudgeFactor,kMaxFieldHeight);
CGSize stringSize = [aString sizeWithFont:self.font constrainedToSize:tallerSize lineBreakMode:UILineBreakModeWordWrap];

while (stringSize.height >= self.frame.size.height)
       {
       if (fontSize <= aMinFontSize) // it just won't fit
           return NO;

       fontSize -= 1.0;
       self.font = [self.font fontWithSize:fontSize];
       tallerSize = CGSizeMake(self.frame.size.width-fudgeFactor,kMaxFieldHeight);
       stringSize = [aString sizeWithFont:self.font constrainedToSize:tallerSize lineBreakMode:UILineBreakModeWordWrap];
       }

return YES; 
}