我使用this方法动态获取UILabel的高度:
+(CGSize) GetSizeOfLabelForGivenText:(UILabel*)label Font:(UIFont*)fontForLabel Size: (CGSize)LabelSize{
label.numberOfLines = 0;
CGSize labelSize = [label.text sizeWithFont:fontForLabel constrainedToSize:LabelSize lineBreakMode:NSLineBreakByCharWrapping];
return (labelSize);
}
使用这个解决方案,如果我的代码运行在低于iOS 8的版本上,我得到的是UILabel的确切大小,但是如果我在iOS7上运行我的应用程序,那么它将返回一个不同的值。
发布于 2014-03-26 05:42:02
这里有一个宽度和高度的整体解决方案。将这些放入你的AppDelegate中:
+(void)fixHeightOfThisLabel:(UILabel *)aLabel
{
aLabel.frame = CGRectMake(aLabel.frame.origin.x,
aLabel.frame.origin.y,
aLabel.frame.size.width,
[AppDelegate heightOfTextForString:aLabel.text
andFont:aLabel.font
maxSize:CGSizeMake(aLabel.frame.size.width, MAXFLOAT)]);
}
+(CGFloat)heightOfTextForString:(NSString *)aString andFont:(UIFont *)aFont maxSize:(CGSize)aSize
{
// iOS7
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
{
CGSize sizeOfText = [aString boundingRectWithSize: aSize
options: (NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
attributes: [NSDictionary dictionaryWithObject:aFont
forKey:NSFontAttributeName]
context: nil].size;
return ceilf(sizeOfText.height);
}
// iOS6
CGSize textSize = [aString sizeWithFont:aFont
constrainedToSize:aSize
lineBreakMode:NSLineBreakByWordWrapping];
return ceilf(textSize.height;
}
+(void)fixWidthOfThisLabel:(UILabel *)aLabel
{
aLabel.frame = CGRectMake(aLabel.frame.origin.x,
aLabel.frame.origin.y,
[AppDelegate widthOfTextForString:aLabel.text
andFont:aLabel.font
maxSize:CGSizeMake(MAXFLOAT, aLabel.frame.size.height)],
aLabel.frame.size.height);
}
+(CGFloat)widthOfTextForString:(NSString *)aString andFont:(UIFont *)aFont maxSize:(CGSize)aSize
{
// iOS7
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
{
CGSize sizeOfText = [aString boundingRectWithSize: aSize
options: (NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading)
attributes: [NSDictionary dictionaryWithObject:aFont
forKey:NSFontAttributeName]
context: nil].size;
return ceilf(sizeOfText.width);
}
// iOS6
CGSize textSize = [aString sizeWithFont:aFont
constrainedToSize:aSize
lineBreakMode:NSLineBreakByWordWrapping];
return ceilf(textSize.width);
}
然后,设置标签的文本即可:
label.numberOfLines = 0;
label.text = @"Everyone loves Stack OverFlow";
并呼叫:
[AppDelegate fixHeightOfThisLabel:label];
注意:label的numberOfLines必须设置为0。希望这能有所帮助。
发布于 2014-03-04 11:13:35
被接受的答案不能让我满意,所以我不得不在我的代码中挖掘出来:
CGSize possibleSize = [string sizeWithFont:[UIFont fontWithName:@"HelveticaNeue" size:10] //font you are using
constrainedToSize:CGSizeMake(skillsMessage.frame.size.width,9999)
lineBreakMode:NSLineBreakByWordWrapping];
CGRect newFrame = label.frame;
newFrame.size.height = possibleSize.height;
label.frame = newFrame;
发布于 2014-03-05 17:15:20
公认的答案太长了。您可以使用以下内容:
+(CGSize) GetSizeOfLabelForGivenText:(UILabel*)label Font:(UIFont*)fontForLabel Size: (CGSize) constraintSize{
label.numberOfLines = 0;
CGRect labelRect = [label.text boundingRectWithSize:constraintSize options:(NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading) attributes:@{NSFontAttributeName:fontForLabel} context:nil];
return (labelRect.size);
}
https://stackoverflow.com/questions/20068849
复制相似问题