方法原型:
- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(nullable NSDictionary<NSString *, id> *)attributes context:(nullable NSStringDrawingContext *)context NS_AVAILABLE(10_11, 7_0);
#import "mylabel.h"
@implementation mylabel
- (void)drawRect:(CGRect)rect {
[super drawRect:rect];
/*在label上画一条线
1.获取到上下文CGContextRef
2.设置画线的起点位置
3.画线,画到另一个点的位置
4.渲染到屏幕上面
*/
CGContextRef context=UIGraphicsGetCurrentContext();
CGContextMoveToPoint(context, 0, rect.size.height/2);
CGContextAddLineToPoint(context, rect.size.width, rect.size.height/2);
CGContextStrokePath(context);
}
mylabel *label=[[mylabel alloc]initWithFrame:CGRectZero];
NSString *s=@"红红火火测试测试";
label.text=s;
[label setNumberOfLines:0];
UIFont *font=[UIFont fontWithName:@"Arial" size:20];
label.font=font;
CGSize size=CGSizeMake(MAXFLOAT, 0);
NSDictionary *attribute = @{NSFontAttributeName: font};
//NSStringDrawingTruncatesLastVisibleLine
//如果文本内容超出指定的矩形限制,文本将被截去并在最后一个字符后加上省略号
//NSStringDrawingUsesFontLeading
//计算行高时使用行间距。(译者注:字体大小+行间距=行高)
//NSStringDrawingUsesLineFragmentOrigin
//绘制文本时使用 line fragement origin 而不是 baseline origin
CGSize labelsize=[s boundingRectWithSize:size options:NSStringDrawingTruncatesLastVisibleLine |
NSStringDrawingUsesLineFragmentOrigin |
NSStringDrawingUsesFontLeading attributes:attribute context:nil].size;
[label setFrame:CGRectMake(100, 200, labelsize.width, labelsize.height)];