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,设置文字后的效果是这样子的

Intrinsic Size-1

当我们写一个子类,重载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

Intrinsic Size-2

  • 场景二

首先,拖拽一个背景色为蓝色的view作为父视图,然后父视图中添加一个label。

父视图的设置

- 水平垂直居中
- Intrinsic Size 为0,0

Label的设置

距离top,bottom,leading,trailing,距离为20

Intrinsic Size-3

这时候,预览如下(仅仅修改label文字)

Intrinsic Size-4

Intrinsic Size-5

可以看到,我们并没有设置蓝色视图的高度宽度,它可以自适应内部包含视图。MBProgressHUD的中间区域自适应大小就是这么做的。

results matching ""

    No results matching ""