在iOS开发中经常会用到label,可以多行显示,但是当数据少的时候可能没有那么多行,就会在中间显示,如果想让它在左上对其,似乎要费一番功夫,一下是我总结的三种方法。
1.sizeToFit 先定义一个label
- (void)viewDidLoad {
[superviewDidLoad];
NSString*string=@"为了测试label的显示方法,所以字符串的长度要长一些!!为了测试label的显示方法,所以字符串的长度要长一些!!为了测试label的显示方法,所以字符串的长度要长一些!!";
_label=[[UILabelalloc]initWithFrame:CGRectMake(20,50,SCREEN_WIDTH-40,300)];
_label.backgroundColor=[UIColorgroupTableViewBackgroundColor];
_label.numberOfLines=0;
_label.text=string;
[self.viewaddSubview:_label];
}
结果是这样的
然后在viewDidLayoutSubviews方法中调用sizeToFit 记住一定是这个方法里
-(void)viewDidLayoutSubviews{
[self.labelsizeToFit];
}
结果如下:
2.写一个分类,重新设置frame
#import
@interfaceUILabel (TopLeftLabel)
- (void)setTopAlignmentWithText:(NSString*)text maxHeight:(CGFloat)maxHeight;
@end
.m文件中
#import"UILabel+TopLeftLabel.h"
@implementationUILabel (TopLeftLabel)
- (void)setTopAlignmentWithText:(NSString*)text maxHeight:(CGFloat)maxHeight
{
CGRectframe =self.frame;
CGSizesize = [textsizeWithFont:self.fontconstrainedToSize:CGSizeMake(frame.size.width, maxHeight)];
frame.size=CGSizeMake(frame.size.width, size.height);
self.frame= frame;
self.text= text;
}
@end
用的时候直接调用
[_labelsetTopAlignmentWithText:stringmaxHeight:300];
下面是效果图
3.重写drawRect方法 继承UILabel重写drawRect方法
#import
@interfaceTopLeftLabel :UILabel
@end
.m文件中
#import"TopLeftLabel.h"
@implementationTopLeftLabel
- (id)initWithFrame:(CGRect)frame {
return[superinitWithFrame:frame];
}
- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines {
CGRecttextRect = [supertextRectForBounds:boundslimitedToNumberOfLines:numberOfLines];
textRect.origin.y= bounds.origin.y;
returntextRect;
}
-(void)drawTextInRect:(CGRect)requestedRect {
CGRectactualRect = [selftextRectForBounds:requestedRectlimitedToNumberOfLines:self.numberOfLines];
[superdrawTextInRect:actualRect];
}
@end
用的时候直接集成这个label就好
NSString*string=@"为了测试label的显示方法,所以字符串的长度要长一些!!为了测试label的显示方法,所以字符串的长度要长一些!!为了测试label的显示方法,所以字符串的长度要长一些!!";
_label=[[TopLeftLabelalloc]initWithFrame:CGRectMake(20,50,SCREEN_WIDTH-40,300)];
_label.backgroundColor=[UIColorgroupTableViewBackgroundColor];
_label.numberOfLines=0;
_label.text=string;
[self.viewaddSubview:_label];
下面是效果图: