我一直在努力为我的 UIAlertView 调整标签,但我没有成功。我想让它根据字符串长度正确调整大小。我读到除了对它进行子类化之外没有什么可以做的,但是当我要这样做时,我发现了一个可以玩它的技巧。(下面的代码)
我可以成功地调整它的大小,为小字符串格式化字体等。我可以很好地适应我的一些字符串(<1000 个字符),但是更大的字符串(>1000 个字符)使它变得丑陋:
- 标签只是拒绝增长以适应额外的内容
- 尽管我减小了文本大小,但它并没有减小(对于不需要的较小字符串,它会减小。并且在需要较小的地方它仍然更大)
- 对于较大的字符串,该标签以白色背景(在设计时在 IB 中看到的)显示,字符串的尾随部分因较大的文本而被隐藏起来。
整个事情看起来完全一团糟。
以下是我如何潜入 UIAlertView 外观代码:
-(void)willPresentAlertView:(UIAlertView *)alertView
{
UILabel *body = [alertView valueForKey:@"_bodyTextLabel"];
body.lineBreakMode = UILineBreakModeWordWrap;
// body.adjustsFontSizeToFitWidth = YES;
CGRect alFrame = body.frame;
CGFloat pointSize;
UIFont * font = [UIFont fontWithName:@"Verdana" size:10];
CGSize labelSize = [body.text sizeWithFont:font minFontSize:8 actualFontSize:&pointSize forWidth:alFrame.size.width lineBreakMode:UILineBreakModeWordWrap];
NSLog (@"%f", labelSize.height);
UIFont *actualFont = [UIFont fontWithName:@"Verdana" size:10];
CGSize sizeWithCorrectHeight = [body.text sizeWithFont:actualFont];
alFrame.size.height = sizeWithCorrectHeight.height*10;
NSLog (@"%f - %f", alFrame.size.height, alFrame.size.width);
body.numberOfLines = 8;
body.frame = alFrame;
body.font = actualFont;
}
请注意,注释行是我尝试过千次尝试的东西。未注释的也会产生相同的效果。正如我在这里编码的那样,较小的文本会调整。我只需要一个可以让我的标签显示所有文本的解决方案,而不管字符串长度如何 - 我知道它仍然有足够的空间,但它只是不会针对更大的字符串调整大小。