UILabel
// 计算label自适应高度 / 宽度
- (void)setupAutoLabel {
// 设置label一些属性,字体大小,以及是否自动换行
UILabel * label = [[UILabel alloc] init];
label.font = [UIFont systemFontOfSize:15];
label.numberOfLines = 0;
label.backgroundColor = [UIColor blueColor];
// 设置富文本属性
UIFont * labelFont = [UIFont systemFontOfSize:15];
NSDictionary * dict = @{NSFontAttributeName:labelFont};
NSString * string = @"http://www.bing.com/knows/search?q=行间距怎么设置&mkt=zh-cn日落时分,沏上一杯山茶,http://www.ba4idu.com听一曲意境空远的《禅》,心神随此天籁,沉溺于玄妙的幻境里。仿http://google.con佛我就是那穿梭https://google.com于葳蕤山林中的一只飞鸟,时而盘旋穿梭,时而引吭高歌;仿佛我就是那潺潺流泻于山涧的一汪清泉,涟漪轻盈,浩淼长流;仿佛我就是那竦峙在天地间的一座山峦,伟岸高耸,从容绵延。我不相信佛,http://zhidao.baidu.com/link?url=YnK9AJFglossoyr0gUD4l_K-d88SZDyLCWLHwH2Em71iyQG1SzGnQTOkGytIu0065Id7eZdBLk0c4oO3ld-2GaE8kLRZaG4bS-NrRyL6swK只是喜欢玄冥空灵http://www.baidu.com的梵音经贝,😍😍😒😍😍😍😍😍😍😒Ds😒fcdsdcsvdvvd";
// 设置label尺寸:(当需要自适应高度的时候,就需要给定一个合适的宽度,以及一个比较大点的高度)
CGSize size = CGSizeMake(250, 1000);
/**
* boundingRectWithSize:设置为label预设尺寸
* options:设置模式选项,这里需要的是高度,所以就不可以是一行,应该设置为NSStringDrawingUsesLineFragmentOrigin
* sttributes:设置富文本属性
* context:设置为nil即可(其实是我也不知道这个怎么用)
*/
CGRect rect = [string boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin attributes:dict context:nil];
label.frame = CGRectMake(50, 100, rect.size.width, rect.size.height);
label.text = string;
[self.view addSubview:label];
}
Label行间距
-(void)test{ NSMutableAttributedString attributedString = [[NSMutableAttributedString alloc] initWithString:self.contentLabel.text]; NSMutableParagraphStyle paragraphStyle = [[NSMutableParagraphStyle alloc] init]; [paragraphStyle setLineSpacing:3];
//调整行间距
[attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [self.contentLabel.text length])]; self.contentLabel.attributedText = attributedString; }
Intrinsic Size
Intrinsic Size有两个很常见的使用场景
- 场景一,为UILabe,UIButton等设置额外的Padding
- 场景二,让父视图根据子视图来自适应自己的大小(为了方便,我在IB上拖拽了,代码实现类似)
场景一
举个例子,一个默认的UIButton,设置文字后的效果是这样子的
当我们写一个子类,重载intrinsicContentSize
@implementation RoundButton
-(CGSize)intrinsicContentSize{
CGSize size = [super intrinsicContentSize];
size.width += size.height;
return size;
}
-(void)layoutSubviews{
[super layoutSubviews];
self.layer.cornerRadius = ceil(self.bounds.size.height/2);
self.layer.masksToBounds = YES;
}
@end
效果是是这样子的,可以看到,我们不管实际宽度多少,都添加了额外的padding
- 场景二
首先,拖拽一个背景色为蓝色的view作为父视图,然后父视图中添加一个label。
父视图的设置
- 水平垂直居中
- Intrinsic Size 为0,0
Label的设置
距离top,bottom,leading,trailing,距离为20
这时候,预览如下(仅仅修改label文字)
可以看到,我们并没有设置蓝色视图的高度宽度,它可以自适应内部包含视图。MBProgressHUD的中间区域自适应大小就是这么做的。