最近有點(diǎn)閑功夫壁酬,自己總結(jié)了一下label自適應(yīng)的幾種方式,現(xiàn)在分享給大家巷查,大概有以下幾種方法:
第一種:?
UILabel *label = [[UILabel alloc] init];??
label.backgroundColor = [UIColor colorWithRed:0.1 green:0.1 blue:0.1 alpha:1];?
label.text = @"大師傅好搜啊發(fā)";?
label.numberOfLines = 0;?
CGSize size = CGSizeMake(100, MAXFLOAT);//設(shè)置高度寬度的最大限度 CGRect rect = [label.text boundingRectWithSize:size options:NSStringDrawingUsesFontLeading|NSStringDrawingTruncatesLastVisibleLine|NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName : [UIFont systemFontOfSize:20]} context:nil];
label.frame = CGRectMake(100, 100, rect.size.width, rect.size.height);? self.view addSubview:label];
其實(shí)就是使用- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(nullable NSDictionary*)attributes context:(nullable NSStringDrawingContext *)context 這個(gè)方法
參數(shù):
size:寬高限制皱坛,用于計(jì)算文本繪制時(shí)占據(jù)的矩形塊。
options: 文本繪制時(shí)的附加選項(xiàng)
NSStringDrawingUsesLineFragmentOrigin//整個(gè)文本將以每行組成的矩形為單位計(jì)算整個(gè)文本的尺寸? ?
?NSStringDrawingUsesFontLeading//以字體間的行距
NSStringDrawingUsesDeviceMetrics //計(jì)算文本尺寸時(shí)將以每個(gè)字或字形為單位來(lái)計(jì)算靶剑。??
?NSStringDrawingTruncatesLastVisibleLine//計(jì)算文本尺寸時(shí)將以每個(gè)字或字形為單位來(lái)計(jì)算。
可以組合試一下達(dá)到自己想要的效果
attributes:對(duì)字體池充、顏色桩引、行距、字間隔等等一些設(shè)置收夸,使用字典來(lái)做一些屬性設(shè)置
context:上下文,該參數(shù)可為 nil 坑匠。
第二種:
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(100, 100, 100, 0)];
label.backgroundColor = [UIColor colorWithRed:0.1 green:0.1 blue:0.1 alpha:1];
label.text = @"我會(huì)自己去適應(yīng)";
label.numberOfLines = 0;
[label sizeToFit];
[self.view addSubview:label];
其實(shí)就是使用 [label sizeToFit];讓label自己去適應(yīng)
或者使用sizeThatFits:方法自己定義寬高
CGSize size = [label sizeThatFits:CGSizeMake(100, MAXFLOAT)];
label.frame = CGRectMake(100, 100, size.width, size.height);
第三種:
UILabel *label = [[UILabel alloc] init];
label.backgroundColor = [UIColor colorWithRed:0.1 green:0.1 blue:0.1 alpha:1];
label.text = @"我會(huì)自己去適應(yīng)寬度的";
label.font = [UIFont systemFontOfSize:50];
CGSize size = [label.text sizeWithAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:50]}];
//ceilf()向上取整函數(shù), 只要大于1就取整數(shù)2. floor()向下取整函數(shù), 只要小于2就取整數(shù)1.
CGSize adaptionSize = CGSizeMake(ceilf(size.width), ceilf(size.height));
label.frame = CGRectMake(100, 100, adaptionSize.width, adaptionSize.height);
[self.view addSubview:label];
這種方法只能適應(yīng)一行的寬高,高度也是根據(jù)字體的大小來(lái)變化的
希望大家能提出寶貴的意見卧惜,可以給我留言厘灼,如果還有別的疑問請(qǐng)發(fā)郵件到我的郵箱:namezyqyx@163.com
謝謝大家,如果你有更好的方法請(qǐng)告知咽瓷,不勝感激设凹。