70 可读性
 将光标移到文章中的句子上,可以查看原文。 显示译文      显示原文      双语对照

分享 |
基于文本长度,如何计算uilabel宽度?
How to calculate UILabel width based on text length?

59 0

我想显示图像UILabel旁边,然而UILabel具有可变文本长度,所以我不知道在何处放置图像。 如何完成此操作?

时间: 15年08月06日 原作者: Peter Hosey

118 0

CGSize expectedLabelSize = [yourString sizeWithFont:yourLabel.font constrainedToSize:maximumLabelSize lineBreakMode:yourLabel.lineBreakMode]; 

/-[ nsstring sizewithfont: forwidth linebreakmode ]

这个问题可能有你的答案,它为我工作。


对于 2014,我在这个新版本编辑,基于Norbert的超方便评论 ! 这一切都是。 cheers!


//yourLabel is your UILabel.

float widthIs = [self.yourLabel.text boundingRectWithSize:self.yourLabel.frame.size options:NSStringDrawingUsesLineFragmentOrigin attributes:@{ NSFontAttributeName:self.yourLabel.font } context:nil] . size. width;

NSLog(@"the width of yourLabel is %f", widthIs);


发布时间: 15年08月06日 原作者: Joe Blow
29 0

对于iOS 6 和更高版本,所选答案正确。

在iOS 7,中 sizeWithFont:constrainedToSize:lineBreakMode: 过时现在建议你使用 boundingRectWithSize:options:attributes:context:


CGRect expectedLabelSize = [yourString boundingRectWithSize:sizeOfRect options:<NSStringDrawingOptions> attributes:@{ NSFontAttributeName: yourString.font AnyOtherAttributes: valuesForAttributes } context:(NSStringDrawingContext *)];


注意,返回值是一个 CGRect 不是CGSize希望在iOS 7.中对使用它的人们有一定的帮助

发布时间: 15年08月06日 原作者: Chetan Shenoy
4 0

使用: yourLabel.intrinsicContentSize.width; 请注意它的iOS 6 +

发布时间: 15年08月06日 原作者: Jakub Truhlář
2 0

在iOS8 sizeWithFont已不推荐使用,请参考


CGSize yourLabelSize = [yourLabel.text sizeWithAttributes:@{NSFontAttributeName : [UIFont fontWithName:yourLabel.font size:yourLabel.fontSize]}];


可以在sizeWithAttributes中添加所需的所有属性。 可以设置的其他属性:


- NSForegroundColorAttributeName
- NSParagraphStyleAttributeName
- NSBackgroundColorAttributeName
- NSShadowAttributeName


等等。 但你可能不需要其他

发布时间: 15年08月06日 原作者: jarora
1 0

下面是我在应用一些其他的原则之后,包括aarons link的一些原理:


 AnnotationPin *myAnnotation = (AnnotationPin *)annotation; self = [super initWithAnnotation:myAnnotation reuseIdentifier:reuseIdentifier]; self.backgroundColor = [UIColor greenColor]; self.frame = CGRectMake(0,0,30,30); imageView = [[UIImageView alloc] initWithImage:myAnnotation.THEIMAGE]; imageView.frame = CGRectMake(3,3,20,20); imageView.layer. masksToBounds = NO; [self addSubview:imageView]; [imageView release]; CGSize titleSize = [myAnnotation.THETEXT sizeWithFont:[UIFont systemFontOfSize:12]]; CGRect newFrame = self.frame; newFrame.size. height = titleSize.height + 12; newFrame.size. width = titleSize.width + 32; self.frame = newFrame; self.layer. borderColor = [UIColor colorWithRed:0 green:.3 blue:0 alpha:1.0f].CGColor; self.layer. borderWidth = 3. 0; UILabel *infoLabel = [[UILabel alloc] initWithFrame:CGRectMake(26,5,newFrame.size.width-32,newFrame.size.height-12)]; infoLabel.text = myAnnotation.title; infoLabel.backgroundColor = [UIColor clearColor]; infoLabel.textColor = [UIColor blackColor]; infoLabel.textAlignment = UITextAlignmentCenter; infoLabel.font = [UIFont systemFontOfSize:12]; [self addSubview:infoLabel]; [infoLabel release];


在本示例中,我将一个自定义pin添加到一个MKAnnotation类,该类根据文本大小调整UILabel的大小。 它还在视图的左侧添加了一个图像,因此你可以看到管理适当间距的代码来处理图像和填充。

关键是要使用 CGSize titleSize = [myAnnotation.THETEXT sizeWithFont:[UIFont systemFontOfSize:12]]; 然后重新定义视图的尺寸。 可以将此逻辑应用到任何视图。

尽管aarons答案对一些人有用,但对我来说并不奏效。 使用一个图像和大小可调这是一个更详细的解释,你应该尝试之前立即将其他地方如果你想要一个更加动态的观点。 我已经为你做了所有的工作 !

发布时间: 15年08月06日 原作者: whyoz
1 0

In


 yourLabel.intrinsicContentSize().width 

发布时间: 15年08月06日 原作者: Arshad
...