一、sizeToFit
- UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(5, 5, 0, 0)];
- label.backgroundColor = [UIColor blueColor];
- [label setFont:[UIFont systemFontOfSize:20]];
- label.text = @"我们都有一个家名字叫中国";
- //会直接改变了这个label的宽和高,使它根据上面字符串的大小做合适的改变
- [label sizeToFit];
- NSLog(@"labelWidth = %f labelHeight = %f", label.frame.size.width, label.frame.size.height);
- // 输出:sizeThatFits.width = 240.000000 sizeThatFits.height = 24.000000
- [self addSubview:label];
二、sizeThatFits方法的使用
- UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(5, 5, 0, 0)];
- label.backgroundColor = [UIColor blueColor];
- [label setFont:[UIFont systemFontOfSize:20]];
- label.text = @"我们都有一个家名字叫中国";
- CGSize sizeThatFits = [label sizeThatFits:CGSizeZero];//返回合适的size
- NSLog(@"sizeThatFits.width = %f sizeThatFits.height = %f", sizeThatFits.width, sizeThatFits.height);
- // 输出:sizeThatFits.width = 240.000000 sizeThatFits.height = 24.000000
- NSLog(@"labelWidth = %f labelHeight = %f", label.frame.size.width, label.frame.size.height);
- // 输出:labelWidth = 0.000000 labelHeight = 0.000000
- //说明sizeThatSize并没有改变原始label的大小,只是返回了一个合适的size;
- //接下来就可以使用这个size来重新设置label的frame了;
- label.frame = CGRectMake(5, 5, sizeThatFits.width, sizeThatFits.height);
- [self addSubview:label];
- UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(5, 5, 0, 0)];
- label.backgroundColor = [UIColor blueColor];
- [label setFont:[UIFont systemFontOfSize:20]];
- label.numberOfLines = 0;//不限行数
- label.lineBreakMode = NSLineBreakByCharWrapping;//设置换行模式
- label.text = @"我们都有一个家名字叫中国我们都有一个家名字叫中国";
- //若label可以换行:
- //100:表示100以下会返回自适应的宽度,超过100返回实际宽度(若有换行最宽为100)。
- //MAXFLOAT:表示不限高度。
- //当然高度也可以给个固定值如400.400以下会返回自适应高度,超过400会返回实际高度。
- CGSize size = [label sizeThatFits:CGSizeMake(100, MAXFLOAT)];
- label.frame = CGRectMake(5, 5, size.width, size.height);
- [self addSubview:label];
- //PS:label的自动换行可以使用此方法来实现
三、让文本适应label的宽度,label宽度不变字体大小根据字数的多少来调节
label.adjustsFontSizeToFitWidth = YES;
小知识点:
label的截断模式
当label的文本内容超过label的宽度时有一个截断模式,就是来处理多出的文本的显示问题。
- label.lineBreakMode = NSLineBreakByCharWrapping;以字符为显示单位显示,后面部分省略不显示。
- label.lineBreakMode = NSLineBreakByClipping;剪切与文本宽度相同的内容长度,后半部分被删除。
- label.lineBreakMode = NSLineBreakByTruncatingHead;前面部分文字以……方式省略,显示尾部文字内容。
- label.lineBreakMode = NSLineBreakByTruncatingMiddle;中间的内容以……方式省略,显示头尾的文字内容。
- label.lineBreakMode = NSLineBreakByTruncatingTail;结尾部分的内容以……方式省略,显示头的文字内容。
- label.lineBreakMode = NSLineBreakByWordWrapping;以单词为显示单位显示,后面部分省略不显示。