iOSはlabelの高さを動的に計算します

986 ワード

実際の開発では、文字の数に基づいてlabelの高さを計算する問題によく遭遇します.以下に2つの方法を提供します.
まずlabelを作成します
    _atest = [[UILabel alloc]initWithFrame:CGRectZero];
    _atest.numberOfLines = 0;
    _atest.lineBreakMode = NSLineBreakByWordWrapping;

このlabelのベース幅(200例)を設定し、高さを最大値に設定します.
CGSize baseSize = CGSizeMake(200, CGFLOAT_MAX);

方法1:labelの内容から高さを計算する(_testStrは文字列)
CGSize labelsize  = [_testStr
                    boundingRectWithSize:baseSize
                    options:NSStringDrawingUsesLineFragmentOrigin
                    attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:15.0]}
                    context:nil].size;
_atest.height = labelsize.height;

方法2:labelの適応に基づいて高さを取得する
CGSize labelsize = [_atest sizeThatFits:baseSize];
_atest.height = labelsize.height;

ダイナミック幅の取得は高さと同じで、ベース幅を最大に設定し、高さを固定すればよいだけです
CGSize baseSize = CGSizeMake(CGFLOAT_MAX, 200);