UILabel 中一些不常用的属性

UILabel 中有一些不经常使用的属性, 但在某些情况下又是非常方便的, 今天来说一说。

 
字体大小自适应 Label 宽度

UILabel *label = [[UILabel alloc]initWithFrame: CGRectMake(50, 50, 100, 100)];
label.font = [UIFont systemFontOfSize:50];
label.backgroundColor = [UIColor greenColor];
label.text = @"共四个字";
[self.view addSubview:label];

//字体大小自适应 Label 宽度
label.adjustsFontSizeToFitWidth = YES;
//字体大小自适应最小比例设置
//label.minimumFontSize = 25; //iOS7.0后已弃用
label.minimumScaleFactor = 0.5;
.

这里写图片描述 
代码中创建的 label宽度为100, 字体内容需要200的宽度, 字体自适应最小比例为0.5。所以宽度为100的时候,字体会自动缩小, 缩小至0.5的比例为极限了。 
注:minimumScaleFactor需要和adjustsFontSizeToFitWidth配合使用

 

在 xib 中控制字体大小自适应 Label 宽度 
这里写图片描述

 

 

文本基线调整分布(baselineAdjustment)

UIBaselineAdjustmentAlignBaselines=0; //默认,文本最上端与中线对齐。 
UIBaselineAdjustmentAlignCenters; //文本中线与label中线对齐。 
UIBaselineAdjustmentNone //文本最低端与label中线对齐。

UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(50, 50, 100, 100)];
label.font = [UIFont systemFontOfSize:50];
label.backgroundColor = [UIColor greenColor];
label.text = @"共四个字";
[self.view addSubview:label];

//字体大小自适应 Label 宽度
label.adjustsFontSizeToFitWidth = YES;
//这个属性就来控制文本基线的行为
label.baselineAdjustment = UIBaselineAdjustmentNone;
.

UIBaselineAdjustmentAlignBaselines效果图: 
这里写图片描述

UIBaselineAdjustmentNone效果图: 
这里写图片描述

UIBaselineAdjustmentAlignCenters效果图: 
这里写图片描述

注:baselineAdjustment需要和adjustsFontSizeToFitWidth配合使用

 

lineBreakMode 


设置标签文字过长时的显示方式,这个属性使用于label中文本的换行和截短,需要注意首先numberofLines必须设置为0,才有效果。

label.lineBreakMode = NSLineBreakByCharWrapping;//以字符为显示单位显示,后面部分省略不显示。  
label.lineBreakMode = NSLineBreakByClipping;//剪切与文本宽度相同的内容长度,后半部分被删除。  
label.lineBreakMode = NSLineBreakByTruncatingHead;//前面部分文字以……方式省略,显示尾部文字内容。  
label.lineBreakMode = NSLineBreakByTruncatingMiddle;//中间的内容以……方式省略,显示头尾的文字内容。  
label.lineBreakMode = NSLineBreakByTruncatingTail;//结尾部分的内容以……方式省略,显示头的文字内容。  
label.lineBreakMode = NSLineBreakByWordWrapping;//以单词为显示单位显示,后面部分省略不显示。 
.

 

preferredMaxLayoutWidth 


表现为在iOS7以上的系统中,UILabel能够自动换行,多行显示的字符串,而在iOS6上面则不会自动换行,直接打省略号。 
正常情况下,numberOfLines设置为0,UILabel就会自动换行了。 
但是在iOS6下面需要设置preferredMaxLayoutWidth, autolayout才会判断到折行的位置,才能正确的显示多行的UILabel 
当label已经显示到界面上的时候,那么宽度就已经确定了,可以直接用此宽度作为最大autolayout宽度设置。

- (void)layoutSubViews
{
    [super layoutSubViews];
    self.label.preferredMaxLayoutWidth = self.label.bounds.size.width;
}
.

 

设置抗拉伸性和抗压缩性

// 布局抗拉伸(设置优先级和方向)
[label setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal];
// 布局抗压缩(设置优先级和方向)
[label setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值