iOS開發--根據label內容動態設定label大小

兩個方法:

- (CGSize)sizeWithAttributes:(nullable NSDictionary<NSString *, id> *)attrs NS_AVAILABLE(10_0, 7_0);
- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(nullable NSDictionary<NSString *, id> *)attributes context:(nullable NSStringDrawingContext *)context NS_AVAILABLE(10_11, 7_0);

eg1:

- (void)viewDidLoad {
    [super viewDidLoad];
    NSString *str = @"原紗央莉選擇了加入AV界爲自己謀求穩定的工作,並且選擇了SOD作爲自己的東家。在2008年11月25日sabra雜誌裏當時原紗央莉連載的專欄“SAORIchewBE”裏公開了要加入AV的事情。";
    //設置按照什麼字體大小來計算,你可以添加其他的屬性
    NSDictionary *attrs = @{NSFontAttributeName : [UIFont systemFontOfSize:25]};
    //label1
    UILabel *label1 = [[UILabel alloc]init];
    label1.backgroundColor = [UIColor yellowColor];
    CGSize size1 = [str sizeWithAttributes:attrs];//方法1,計算大小,但是隻有一行
    label1.frame = (CGRect){{50,50},size1};
    label1.text = str;
    [self.view addSubview:label1];
    //label2
    UILabel *label2 = [[UILabel alloc]init];
    label2.backgroundColor = [UIColor purpleColor];
    CGSize size2 = CGSizeMake(200, MAXFLOAT);//給出一個限制size,設定寬度200,高度可變
    CGRect rect2 = [str boundingRectWithSize:size2
                                     options:NSStringDrawingUsesLineFragmentOrigin attributes:attrs
                                     context:nil];//方法2,計算大小,但是會根據size2來限制
    CGFloat label2_H = rect2.size.height;
    label2.frame = CGRectMake(50, 100, size2.width, label2_H);
    [self.view addSubview:label2];
    label2.text = str;
    label2.numberOfLines = 0;
    //label1和label2都沒有設置字體的大小,所以你會感覺label有很多空白,看label3
    //label3設置了字體大小,因爲默認的字體大小小於25,所以label1和label2都有空白,現在設置label3的字體和計算依據的字體一樣大,看效果
    UILabel *label3 = [[UILabel alloc]init];
    label3.backgroundColor = [UIColor grayColor];
    CGSize size3 = CGSizeMake(200, MAXFLOAT);
    CGRect rect3 = [str boundingRectWithSize:size2
                                     options:NSStringDrawingUsesLineFragmentOrigin attributes:attrs
                                     context:nil];//方法2
    CGFloat label3_H = rect3.size.height;
    label3.frame = CGRectMake(150, 300, size3.width, label3_H);
    [self.view addSubview:label3];
    label3.font = [UIFont systemFontOfSize:25];//相比label2多了這句代碼
    label3.text = str;
    label3.numberOfLines = 0;
}





發佈了34 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章