设置文本后如何获得 UILabel 的正确宽度?
How to get the correct width of a UILabel after the text has been set?
我正在获取 UILabel 的宽度 [在设置文本后]:
myUILabel.frame.width
但它的宽度始终相同,无论它是否包含字符串:"Hello."
或字符串:"Hello everyone on this planet."
。但是 UILabel 需要与第二个 String 具有更大的宽度。
你应该使用[label sizeToFit]
标签上的 sizeToFit
将拉伸标签以容纳文本。
另一个解决方案是计算字符串的宽度并根据字符串宽度重新构建标签。
对于第二种解决方案,您可以将字符串的大小计算为
CGSize strSize = CGSizeZero;
CGSize minSize = CGSizeZero;
if([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
{
NSAttributedString *attributedText = [[[NSAttributedString alloc] initWithString:text attributes:@{NSFontAttributeName: label.font}] autorelease];
CGRect rect = [attributedText boundingRectWithSize:constraintSize
options:NSStringDrawingUsesLineFragmentOrigin
context:nil];
strSize = rect.size;
}
else
{
strSize = [text sizeWithFont:label.font constrainedToSize:constraintSize];
}
尝试myUILabel.intrinsicContentSize()
。当然,请确保先设置字体。
尝试
myUILabel.intrinsicContentSize.width
或者
myUILabel.intrinsicContentSize().width
我正在获取 UILabel 的宽度 [在设置文本后]:
myUILabel.frame.width
但它的宽度始终相同,无论它是否包含字符串:"Hello."
或字符串:"Hello everyone on this planet."
。但是 UILabel 需要与第二个 String 具有更大的宽度。
你应该使用[label sizeToFit]
sizeToFit
将拉伸标签以容纳文本。
另一个解决方案是计算字符串的宽度并根据字符串宽度重新构建标签。
对于第二种解决方案,您可以将字符串的大小计算为
CGSize strSize = CGSizeZero;
CGSize minSize = CGSizeZero;
if([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
{
NSAttributedString *attributedText = [[[NSAttributedString alloc] initWithString:text attributes:@{NSFontAttributeName: label.font}] autorelease];
CGRect rect = [attributedText boundingRectWithSize:constraintSize
options:NSStringDrawingUsesLineFragmentOrigin
context:nil];
strSize = rect.size;
}
else
{
strSize = [text sizeWithFont:label.font constrainedToSize:constraintSize];
}
尝试myUILabel.intrinsicContentSize()
。当然,请确保先设置字体。
尝试
myUILabel.intrinsicContentSize.width
或者
myUILabel.intrinsicContentSize().width