【发布时间】:2014-12-23 03:12:04
【问题描述】:
我正在编写一个 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 的值有时会大于传递给boundingRectWithSize:options:attributes:context: 的原始contentWidth 值。如何确保 contentWidth 是最大宽度?这很重要,因为我稍后会在某些约束中使用这些值,并且此最大宽度保持不变很重要。
谢谢。
【问题讨论】:
-
也许你想初始化 contentWidth 时的 double = 导致了问题?
-
感谢您指出这一点,但不幸的是,不,这是我在编辑正在编写的问题时发生的错误。检查了我的代码,没问题。
标签: ios objective-c iphone width uilabel