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

分享 |
基于文本长度,如何计算uilabel宽度?

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: ] n 。

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


2014年,我在这个新版本中进行了编辑,基于下面的Norbert评论 ! 了,干杯


//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中 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中使用它的人们有帮助。

发布时间: 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

这里是'我在应用了一些其他这样的帖子之后,包括 aaron,提出了一些'的链接:


 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];


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

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

尽管 aaron'答案对某些人来说是有效的'不适合我。 这是一个更详细的解释,你应该在任何其他地方尝试,如果你想要一个更具动态性的图像,并。 我已经为你做了所有的工作 !

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

Swift


 yourLabel.intrinsicContentSize().width 

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