我有一个方法,可以为给定字符串长度的 UITextView 提供完美的大小(具有相应的正确字体大小):
- (NSInteger) heightOfLabel:(NSString*) string {
CGSize maximumLabelSize = CGSizeMake([[UIScreen mainScreen] bounds].size.width - 40, FLT_MAX);
CGSize expectedLabelSize = [[NSString stringTrimmedForLeadingAndTrailingWhiteSpacesFromString:string]
sizeWithFont:[UIFont systemFontOfSize:15]
constrainedToSize:maximumLabelSize
lineBreakMode:NSLineBreakByWordWrapping];
return expectedLabelSize.height + 5;
}
事实上,即使在 iOS7 中,它仍然给我一个完美的配合。尽管现在它提出了一个警告方法,说我不应该使用“sizeWithFont:contrainedToSize:lineBreakMode”。
现在它说我应该使用 -boundingRectWithSize:options:attributes:context:
这种方法对于 iOS7 来说并不新鲜,因此我认为可以在堆栈溢出上询问它,而不是去官方的苹果开发者论坛。
我有三个问题:
1)因为它已被弃用,这是否意味着我绝对应该替换它,尽管它仍然有效?
2)我已经尝试了许多不同的boundingRectWithSize:方法,具有各种变量,但它从来都不是完美的,它似乎总是有点出格(正如许多stackoverflow问题指出的那样)-是否有一个完美的替代品可以完全替代这种不弃用的方法和我之前的方法一样,麻烦最少吗?
3)为什么要删除这个方法?是因为与其他方法重叠吗?
经过一个小时的尝试错误后,我设法让它工作:
CGSize maximumLabelSize = CGSizeMake(tableView.width, MAXFLOAT);
NSStringDrawingOptions options = NSStringDrawingTruncatesLastVisibleLine |
NSStringDrawingUsesLineFragmentOrigin;
NSDictionary *attr = @{NSFontAttributeName: [UIFont systemFontOfSize:15]};
CGRect labelBounds = [string boundingRectWithSize:maximumLabelSize
options:options
attributes:attr
context:nil];
Update:
正如T先生在下面的回答中提到的:在 iOS 7 及更高版本中,此方法返回小数尺寸(在返回的 CGRect 的尺寸组件中);要使用返回的大小来调整视图大小,必须使用 ceil 函数将其值提高到最接近的较大整数。 ceilf
推荐使用该功能。
CGFloat height = ceilf(labelBounds.size.height);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)