繁体   English   中英

iOS如何动态确定UILabel的大小

[英]iOS how to determine the size of UILabel dynamically

我试图找出一种方法来了解UILabel基本上字符串和字体大小的大小,以了解如何定义CGRect维度。

在此我知道了:

UILabel *myLabel = [[UILabel alloc] init];
myLabel.font = [UIFont fontWithName:@"BentonSansComp-Medium" size:50.0];
myLabel.text = @"This is a string example"  

问题是我没有可用字符串列表,但需要将标签居中,字符串不应该是剁(使用上面的例子:“这是一个str ......”)。 你们中的任何人都知道如何根据字符串和字体大小确定UILabel的大小?

我真的很感谢你的帮助。

只是用

 UILabel *myLabel = [[UILabel alloc] init];
 myLabel.font = [UIFont fontWithName:@"BentonSansComp-Medium" size:50.0];
 myLabel.text = @"This is a string example" 
 [myLabel sizeToFit]; //it will resize the label to just the text is set
 CGRectMake size = myLabel.frame; // u will get the frame of the label once is resized
 float height = size.size.height;  //to get the height of the label
 float width = size.size.width;  //to get the width of the label

希望能帮助到你

确保改变文本的时间你调用[myLabel sizeToFit]; 方法

刚遇到同样的问题。 计算很多大小的UILabelUITextView是很昂贵的,所以我想知道是否有比配置标签或文本视图更便宜的方式然后询问它的大小。 在计算长表视图的行高时,这一点尤其重要。

事实证明,UILabel似乎构建了UIKit的布局和绘图的字符串添加,而UITextView使用Text Kit(在iOS 7中)。 两个工具都可以配置为使用相同的设置,并使用UIKit类计算更便宜的字符串尺寸。

对于UILabel来说,这是我发现的:

CGFloat labelHeight = [testString boundingRectWithSize:(CGSize){ labelWidth, CGFLOAT_MAX }
                                               options:NSStringDrawingUsesLineFragmentOrigin
                                            attributes:@{ NSFontAttributeName : labelFont };
                                               context:nil].size.height;
labelHeight = ceil(labelHeight);

这假设numberOfLines = 0 注意需要对结果进行舍入。

我测试了上面的代码,大约4000个字符串渲染成100个不同的宽度,所有结果都等于我用于比较的UILabel。

我做了同样的事情来计算UITextView尺寸,它更复杂,需要设置NSLayoutManager 这里的加速比更令人印象深刻(比使用UITextView快约50倍)。

如果有人对此感兴趣的是代码和测试项目

我认为你需要的是多行,这将增加下面所需的区域。 按照这个,不会再......了

myLabel.lineBreakMode = NSLineBreakByWordWrapping;
myLabel.numberOfLines = 0;

请务必查看此问题根据文字调整UILabel高度

似乎是你在寻找什么。

您可以通过执行以下操作来计算标签的width

[@"STRING" sizeWithFont:[UIFont fontWithName:@"FONT" size:12] forWidth:200 lineBreakMode:NSLineBreakByWordWrapping];

否则你只需在标签中设置字符串,然后调用sizeToFit ,这将根据文本设置标签的frame

在iOS7中使用NSString方法boundingRectWithSize:options:context: . 看看这里的文档。

CGRect rectYouNeed =
  [myLabel.text boundingRectWithSize:CGSizeMake(100, CGFLOAT_MAX)
                             options:NSStringDrawingUsesLineFragmentOrigin
                             attributes:@{ NSFontAttributeName : myLabel.font }
                             context:nil];

检查我的代码,我已经在我的一个应用程序中写了它。

CGSize maximumLabelSize = CGSizeMake(270, FLT_MAX);
CGSize expectedLabelSize = [myString sizeWithFont:[UIFont fontWithName:@"Helvetica" size:16.0f] constrainedToSize:maximumLabelSize lineBreakMode:NSLineBreakByWordWrapping];

NSLog(@"Expected Size of label based on string--%@",NSStringFromCGSize(expectedLabelSize));
//adjust the label the the new height.
CGRect newFrame = myLabel.frame;//get initial frame of your label
newFrame.size.height = expectedLabelSize.height;
myLabel.frame = newFrame;
NSLog(@"new frame of label--%@",NSStringFromCGRect(newFrame));
[myLabel setText:attString];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM