我正在编写一个iPhone应用程序,我正在运行时创建一个带有动态内容的UILabel。我无法控制UILabel的内容,因此我必须计算它的大小,以便稍后我可以使用这些大小值来设置一些UI约束。
我使用以下代码创建UILabel并计算其预期大小:
UILabel *titleLabel = [[UILabel alloc] init];
titleLabel.font = [UIFont fontWithName:@"Arial-Bold" size:20];
titleLabel.numberOfLines = 0;
titleLabel.text = @"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer vulputate venenatis justo in ultrices. Pellentesque eu pharetra elit, id faucibus mi.";
//Calculate the expected lable size
CGRect applicationFrame = [[UIScreen mainScreen] applicationFrame];
CGFloat contentWidth = applicationFrame.size.width - 20; // 20 is 10+10, a margin of 10 from each side
CGSize maximumLabelSize = CGSizeMake(contentWidth, FLT_MAX); // FLT_MAX here simply means max possible height
CGRect expectedLabelSize = [titleLabel.text boundingRectWithSize:maximumLabelSize
options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
attributes:@{
NSFontAttributeName:titleLabel.font
}
context:nil];
当我运行上面的代码时,值expectedLabelSize.size.width
有时会大于传递到contentWidth
的原始boundingRectWithSize:options:attributes:context:
值。如何确保contentWidth
是最大宽度?这很重要,因为我稍后会在某些约束中使用这些值,并且最大宽度保持不变非常重要。
感谢。
答案 0 :(得分:1)
在Apple's reference中,有一个有趣的讨论:
此方法返回字符串中字形的实际边界。 一些字形(例如空格)允许重叠 布局约束由传入的大小指定,因此在某些情况下 返回的CGRect的size组件的宽度值可以 超过size参数的宽度值。
这应该是你正在寻找的。结果宽度是否比您给出的“最大值”大很多?如果不是,我想讨论会回答你。