gpt4 book ai didi

iphone - 如何找到UILabel的行数

转载 作者:行者123 更新时间:2023-12-03 18:12:26 27 4
gpt4 key购买 nike

我使用换行方法在 UILabel 中显示文本。现在我想知道 UILabel 中有多少行。

是否有任何可能的方法来查找 UILabel 的行数。

谢谢。

最佳答案

正如所指出的,这篇文章涉及如何获取高度,而不是行数。要获取行数,

  1. 获取单个字母的高度,例如@“A”
  2. 将字符串的高度除以上面 1 中获得的高度。

例如

CGFloat unitHeight = [@"A" heightForWidth:width usingFont:font];
CGFloat blockHeight = [text heightForWidth:width usingFont:font];
NSInteger numberOfLines = ceilf(blockHeight / unitHeight);
// need to #include <math.h> for ^^^^^

从 iOS 7 开始,获取标签所需高度的方式发生了变化。要获取高度,可以使用以下代码:

NSStringDrawingContext *context = [[NSStringDrawingContext alloc] init];
CGSize labelSize = (CGSize){width, FLT_MAX};
CGRect r = [self boundingRectWithSize:labelSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName: font} context:context];

其中高度为r.size.height。请注意,必须提供font。为了方便起见,您可以将其放入 NSString 的类别中,例如

@implementation NSString (HeightCalc)

- (CGFloat)heightForWidth:(CGFloat)width usingFont:(UIFont *)font
{
NSStringDrawingContext *context = [[NSStringDrawingContext alloc] init];
CGSize labelSize = (CGSize){width, FLT_MAX};
CGRect r = [self boundingRectWithSize:labelSize options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName: font} context:context];
return r.size.height;
}

@end

(如果不使用 ARC,请进行内存管理,顺便说一句。)

对于 iOS 6 及更低版本:

假设您有一个 UILabel *myLabel 并且您想找出标签的高度(通过一些调整,您可以通过将高度除以某个适当的数字来获得行数,其中取决于字体大小)。

UILabel *myLabel;
CGSize labelSize = [myLabel.text sizeWithFont:myLabel.font
constrainedToSize:myLabel.frame.size
lineBreakMode:UILineBreakModeWordWrap];
CGFloat labelHeight = labelSize.height;

希望有帮助。如果它不起作用,请告诉我,我会进一步挖掘。另外,未经测试的代码,但可引用引用。

对于更完整的示例,这里是我放入 View Controller 的 viewDidLoad: 方法中的代码:

[super viewDidLoad];
UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(50,50,200,350)];
myLabel.numberOfLines = 0;
myLabel.lineBreakMode = UILineBreakModeWordWrap;
myLabel.text = @"This is some text in a UILabel which is long enough to wrap around the lines in said UILabel. This is a test, this is only a test.";
[self.view addSubview:myLabel];
CGSize labelSize = [myLabel.text sizeWithFont:myLabel.font
constrainedToSize:myLabel.frame.size
lineBreakMode:UILineBreakModeWordWrap];
CGFloat labelHeight = labelSize.height;
NSLog(@"labelHeight = %f", labelHeight);
[myLabel release];

NSLog 的输出如下:

2010-11-15 18:25:27.817 so_labelheight[728:307] labelHeight = 126.000000

关于iphone - 如何找到UILabel的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4172615/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com