Cocoa touch 使多行UILabel从顶部而不是中间开始文本

Cocoa touch 使多行UILabel从顶部而不是中间开始文本,cocoa-touch,uikit,uilabel,Cocoa Touch,Uikit,Uilabel,我对多行UILabel有一个小问题,我的UILabel文本类奇怪地从中间开始,当新行到达时它会上升,所以最后一行总是在中间。我希望它的行为像一个普通的文本视图,从顶部开始,每行都在下面,第一行保持在顶部。抱歉,如果我解释得不好,如果需要,我可以尝试详细说明!提前谢谢 您可以在NSString上使用sizeWithFont:constrainedToSize:lineBreakMode:方法计算给定字体和受约束宽度的文本块的高度。然后,您将更新标签的框架,使其刚好足以包含文本 CGSize tex

我对多行UILabel有一个小问题,我的UILabel文本类奇怪地从中间开始,当新行到达时它会上升,所以最后一行总是在中间。我希望它的行为像一个普通的文本视图,从顶部开始,每行都在下面,第一行保持在顶部。抱歉,如果我解释得不好,如果需要,我可以尝试详细说明!提前谢谢

您可以在NSString上使用
sizeWithFont:constrainedToSize:lineBreakMode:
方法计算给定字体和受约束宽度的文本块的高度。然后,您将更新标签的框架,使其刚好足以包含文本

CGSize textSize = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(label.frame.size.width, MAXFLOAT) lineBreakMode:label.lineBreakMode];
label.frame = CGRectMake(20.0f, 20.0f, textSize.width, textSize.height);

由于iOS 7.0+中取消了sizeWithFont方法,因此可以使用名为boundingRectWithSize的替代方法

例如:

NSDictionary *attrsDictionary =[NSDictionary dictionaryWithObject:YourFont forKey:NSFontAttributeName];
NSAttributedString *attrString =[[NSAttributedString alloc] initWithString:yourString attributes:attrsDictionary];

textRect = [attrString boundingRectWithSize:yourSize options:NSStringDrawingUsesLineFragmentOrigin context:nil];

您可能还需要设置
标签。numberOfLines=0