扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
解决UILabel设置富文本字体后(即设置行间距),文字没有居中显示
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:空间域名、网络空间、营销软件、网站建设、华安网站维护、网站推广。
1、创建
CGRect rect = CGRectMake(100, 200, 50, 50);
UILabel *label = [[UILabel alloc] initWithFrame:rect];
2、text //设置和读取文本内容,默认为nil
label.text = @”文本信息”; //设置内容
NSLog(@”%@”, label.text); //读取内容
3、textColor //设置文字颜色,默认为黑色
lable.textColor = [UIColor redColor];
4、font //设置字体大小,默认17
label.font = [UIFont systemFontOfSize:20]; //⼀一般方法
label.font = [UIFont boldSystemFontOfSize:20]; //加粗方法
label.font = [UIFont fontWithName:@"Arial" size:16]; //指定
字体的方法
//还有⼀一种从外部导入字体的方法。
5、textAlignment //设置标签文本对齐方式。
label.textAlignment = NSTextAlignmentCenter; //还有NSTextAlignmentLeft、NSTextAlignmentRight.
6、numberOfLines //标签最多显示行数,如果为0则表示多行。
label.numberOfLines = 2;
7、enabled //只是决定了Label的绘制方式,将它设置
为NO将会使文本变暗,表示它没有激活,这时向它设置颜色值是无效的。
label.enable = NO;
8、highlighted //是否高亮显示
label.highlighted = YES;
label.highlightedTextColor = [UIColor orangeColor]; //高亮
显示时的文本颜色
9、ShadowColor //设置阴影颜色
[label setShadowColor:[UIColor blackColor]];
10、ShadowOffset //设置阴影偏移量
[label setShadowOffset:CGSizeMake(-1, -1)];
11、baselineAdjustment //如果adjustsFontSizeToFitWidth属性设
置为YES,这个属性就来控制文本基线的行为。
label.baselineAdjustment = UIBaselineAdjustmentNone;
UIBaselineAdjustmentAlignBaselines = 0,默认,文本最上端与中线对齐。
UIBaselineAdjustmentAlignCenters, 文本中线与label中线对齐。
UIBaselineAdjustmentNone, 文本最低端与label中线对齐。
12、Autoshrink //是否自动收缩
Fixed Font Size 默认,如果Label宽度小于文字长度时时,文字大小不自动缩放
minimumScaleFactor 设置最小收缩比例,如果Label宽度小于文字长度时,文字
进行收缩,收缩超过比例后,停止收缩。
minimumFontSize 设置最小收缩字号,如果Label宽度小于文字长度时,文字字号
减小,低于设定字号后,不再减小。//6.0以后不再使用了。
label.minimumScaleFactor = 0.5;
13、adjustsLetterSpacingToFitWidth //改变字母之间的间距来适应Label大小
myLabel.adjustsLetterSpacingToFitWidth = NO;
14、 lineBreakMode //设置文字过长时的显示格式
label.lineBreakMode = NSLineBreakByCharWrapping;以字符为显示单位显
示,后面部分省略不显示。
label.lineBreakMode = NSLineBreakByClipping;剪切与文本宽度相同的内
容长度,后半部分被删除。
label.lineBreakMode = NSLineBreakByTruncatingHead;前面部分文字
以……方式省略,显示尾部文字内容。
label.lineBreakMode = NSLineBreakByTruncatingMiddle;中间的内容
以……方式省略,显示头尾的文字内容。
label.lineBreakMode = NSLineBreakByTruncatingTail;结尾部分的内容
以……方式省略,显示头的文字内容。
label.lineBreakMode = NSLineBreakByWordWrapping;以单词为显示单位显
示,后面部分省略不显示。
15、 adjustsFontSizeToFitWidth //设置字体大小适应label宽度
label.adjustsFontSizeToFitWidth = YES;
16、attributedText:设置标签属性文本。
NSString *text = @"first";
NSMutableAttributedString *textLabelStr =
[[NSMutableAttributedString alloc]
initWithString:text];
[textLabelStr
setAttributes:@{NSForegroundColorAttributeName :
[UIColor lightGrayColor], NSFontAttributeName :
[UIFont systemFontOfSize:17]} range:NSMakeRange(11,
10)];
label.attributedText = textLabelStr;
17、竖排文字显示每个文字加一个换行符,这是最方便和简单的实现方式。
label.text = @"请\n竖\n直\n方\n向\n排\n列";
label.numberOfLines = [label.text length];
18、计算UIlabel 随字体多行后的高度
CGRect bounds = CGRectMake(0, 0, 200, 300);
heightLabel = [myLabel textRectForBounds:bounds
limitedToNumberOfLines:20]; //计算20行后的Label的Frame
NSLog(@"%f",heightLabel.size.height);
19、UILabel根据字数多少自动实现适应高度
UILabel *msgLabel = [[UILabel alloc]
initWithFrame:CGRectMake(15, 45, 0, 0)];
msgLabel.backgroundColor = [UIColor lightTextColor];
[msgLabel setNumberOfLines:0];
msgLabel.lineBreakMode = UILineBreakModeWordWrap;
msgLabel.font = [UIFont fontWithName:@"Arial" size:12];
CGSize size = CGSizeMake(290, 1000);
msgLabel.text = @"获取到的deviceToken,我们可以通过webservice服务提
交给.net应用程序,这里我简单处理,直接打印出来,拷贝到.net应用环境中使
用。";
CGSize msgSie = [msgLabel.text sizeWithFont:fonts
constrainedToSize:size];
[msgLabel setFrame:CGRectMake(15, 45, 290, msgSie.height)];
20、渐变字体Label
UIColor *titleColor = [UIColor colorWithPatternImage:[UIImage
imageNamed:@"btn.png"]];
NSString *title = @"Setting";
UILabel *titleLabel = [[UILabel alloc]
initWithFrame:CGRectMake(0, 0, 80, 44)];
titleLabel.textColor = titleColor;
titleLabel.text = title;
titleLabel.font = [UIFont boldSystemFontOfSize:20];
titleLabel.backgroundColor = [UIColor clearColor];
[self.view addSubview:titleLabel];
[titleLabel release];
21、Label添加边框
titleLabel.layer.borderColor = [[UIColor grayColor] CGColor];
titleLabel.layer.borderWidth = 2;
+ (float)widthAuto:(NSString *)content fontSize:(CGFloat)fontSize contentheight:(CGFloat)height{
// 列宽
// CGFloat contentHeight = height;
// 用何种字体进行显示
UIFont *font = [UIFont systemFontOfSize:fontSize];
// 计算出显示完内容需要的最小尺寸
CGSize size = CGSizeMake(100, 100);
// 计算出显示完内容需要的最小尺寸
NSDictionary * tdic = [NSDictionary dictionaryWithObjectsAndKeys:font,NSFontAttributeName,nil];
//ios7方法,获取文本需要的size,限制宽度
CGSize actualsize =[content boundingRectWithSize:size options:NSStringDrawingUsesLineFragmentOrigin |NSStringDrawingUsesFontLeading attributes:tdic context:nil].size;
return actualsize.width;
}
有时候,我们的label设置的高度比较高,然而文字比较少,这时候文字默认就会水平局左,垂直居中显示,我们都知道UILabel有水平局左,居右,居中的源方法,但是水平的确实没有,这时候的效果就是文字的上面空白很多,下面空白很多,我们只需要写一个UILabel的类就可以实现我们想要的效果,文字局左上角显示,其实很简单:
创建一个继承与UILabel的类,只需要在.m中写以下方法就可以
然后利用该类的名字为对象的属性,创建一个UILabel就可以了
在开发项目的时候,经常遇到需要适配uilabel的宽度的地方。如果label后面不需要紧跟其他的UI元素还可以,只需要设置一个label的宽度,然后字体靠左对齐就可以了。
但是,如果像图中这样依然采用这种方式,则会导致右边的元素不会紧跟着文字,达不到预想的效果。
这时preferredMaxLayoutWidth就可以发挥它的作用了。
// Support for constraint-based layout (auto layout)
// If nonzero, this is used when determining -intrinsicContentSize for multiline labels
@property(nonatomic) CGFloat preferredMaxLayoutWidth NS_AVAILABLE_IOS(6_0);
文档中说的大概意思就是,当约束基于auto layout时,如果这个值不是0,这个属性就可以用来固定多行label的宽度。
也就是说当文本很长的时候,可以通过这个属性来设置label的最大宽度,使label通过更多的行数来展示全部文本内容。
那么问题来了,我们要的效果是限制但行文本的最大宽度,而不是让文本多行展示。
这个地方我试过将label的numberOfLines设置为1,但是此时设置的最大宽度不起作用了。(毕竟preferredMaxLayoutWidth说明是约束多行文本的最大宽度。。)
所以,我又想到了一个曲线救国的办法,在xib中为label的高度加一个只有一行文字时高度的约束,这时经过我的测试就达到了预期的效果:只展示单行文字,并且label不会超过设定的最大宽度,文字长度较短时,label也是对应文本的相应宽度。完美!
(文章写的很少,有些啰嗦,见谅。)
1. 创建CGRectrect = CGRectMake(100,200,50,50);
UILabel *label = [[UILabelalloc]initWithFrame:rect];
2. text 设置和读取文本内容,默认为nil
label.text = @”文本信息”; 设置内容
NSLog(@”%@”, label.text) 打印label内容
3. textColor 设置文字颜色,默认为黑色
lable.textColor = [UIColor redColor];
4. font 设置字体大小,默认17
label.font = [UIFont systemFontOfSize:20]; 跟随系统默认字体
label.font=[UIFont boldSystemFontOfSize:20]; 设置字体加粗字号为20的label
label.font=[UIFont fontWithName:@"Arial"size:16]; 指定字体的方法, 还有⼀一种从外部导入字体的方法
5. textAlignment 设置标签文本对齐方式
label.textAlignment = NSTextAlignmentCenter; 设置文本内容居中显示
label.textAlignment = NSTextAlignmentLeft; 设置文本内容居左显示
label.textAlignment = NSTextAlignmentRight; 设置文本内容居右显示
6. numberOfLines 设置文本最多显示行数, 为0则表示行数不限(无限行)
label.numberOfLines = 2; 设置文本内容行数为2行
7. enabled 只是决定了Label的绘制方式,将它设置为NO将会使文本变暗,表示它没有激活,这时向它设置颜色值是无效的, 默认为YES;
label.enable = NO;
8. highlighted 是否高亮显示,默认为NO
label.highlighted = YES;
label.highlightedTextColor = [UIColor orangeColor]; 高亮显示时的文本颜色
9. ShadowColor 设置阴影颜色
[label setShadowColor:[UIColorblackColor]];
10. ShadowOffset 设置阴影偏移量
[label setShadowOffset:CGSizeMake(-1,-1)];
11. baselineAdjustment
如果adjustsFontSizeToFitWidth属性设置为YES,这个属性就来控制文本基线的行为。
label.baselineAdjustment = UIBaselineAdjustmentNone;
UIBaselineAdjustmentAlignBaselines = 0默认,文本最上端与中线对齐。
UIBaselineAdjustmentAlignCenters,文本中线与label中线对齐。
UIBaselineAdjustmentNone,文本最低端与label中线对齐。
12. Autoshrink 是否自动收缩FixedFontSize 默认,如果Label宽度小于文字长度时,文字大小不自动缩放minimumScaleFactor 设置最小收缩比例,如果Label宽度小于文字长度时,文字进行收缩,收缩超过比例后,停止收缩。minimumFontSize 设置最小收缩字号,如果Label宽度小于文字长度时,文字字号减小,低于设定字号后,不再减小。//6.0以后不再使用了。
label.minimumScaleFactor = 0.5;
13. adjustsLetterSpacingToFitWidth
改变字母之间的间距来适应Label大小
label.adjustsLetterSpacingToFitWidth = NO;
14. lineBreakMode 设置文字过长时的显示格式
label.lineBreakMode = NSLineBreakByCharWrapping;以字符为显示单位显示,后面部分省略不显示。
label.lineBreakMode=NSLineBreakByClipping;剪切与文本宽度相同的内容长度,后半部分被删除。
label.lineBreakMode=NSLineBreakByTruncatingHead;前面部分文字以……方式省略,显示尾部文字内容。
label.lineBreakMode=NSLineBreakByTruncatingMiddle;中间的内容以……方式省略,显示头尾的文字内容。
label.lineBreakMode=NSLineBreakByTruncatingTail;结尾部分的内容以……方式省略,显示头的文字内容。
label.lineBreakMode=NSLineBreakByWordWrapping;以单词为显示单位显示,后面部分省略不显示。
15. adjustsFontSizeToFitWidth 设置字体大小适应label宽度
label.adjustsFontSizeToFitWidth = YES;
16. attributedText 设置标签属性文本。
NSString*text=@"first";
NSMutableAttributedString *textLabelStr = [[NSMutableAttributedStringalloc]initWithString:text];
[textLabelStrsetAttributes:@{NSForegroundColorAttributeName[UIColorlightGrayColor],NSFontAttributeName: [UIFontsystemFontOfSize:17]} range:NSMakeRange(11,10)];
label.attributedText = textLabelStr;
17. 竖排文字显示每个文字加一个换行符,这是最方便和简单的实现方式。
label.text=@"请\n竖\n直\n方\n向\n排\n列";
label.numberOfLines = [label.text length];(可以直接设置成数字)
18. 计算UIlabel 随字体多行后的高度
CGRect bounds = CGRectMake(0,0,200,300);
heightLabel = [label textRectForBounds:bounds limitedToNumberOfLines:20];计算20行后的Label的Frame
NSLog(@"%f",heightLabel.size.height);
19. UILabel根据字数多少自动实现适应高度
UILabel*msgLabel = [[UILabel alloc] initWithFrame:CGRectMake(15,45,0,0)];
msgLabel.backgroundColor=[UIColor lightTextColor];
[msgLabel setNumberOfLines:0];
msgLabel.lineBreakMode = UILineBreakModeWordWrap;
msgLabel.font = [UIFont fontWithName:@"Arial"size:12];
CGSize size = CGSizeMake(290,1000);
msgLabel.text = @"一个人 一首歌 一杯酒 一支烟 一部手机 一台电脑 一杯清茶 一路清贫 一路走 一路停 一个远方 一个你还没到来 万世孤独";
CGSize msgSie = [msgLabel.text sizeWithFont:fontsconstrainedToSize:size];
[msgLabel setFrame:CGRectMake(15,45,290,msgSie.height)];
20. 渐变字体
LabelUIColor *titleColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"btn.png"]];
NSString *title = @"Setting";
UILabel*titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(0,0,80,44)];
titleLabel.textColor=titleColor;
titleLabel.text = title;
titleLabel.font = [UIFont boldSystemFontOfSize:20];
titleLabel.backgroundColor=[UIColor clearColor];
[self.view addSubview:titleLabel];
21. Label添加边框
titleLabel.layer.borderColor = [[UIColor grayColor] CGColor];
titleLabel.layer.borderWidth = 2;
22. 设置label内边距
.h文件
@interface DrawRectLabel : UILabel
@property ( nonatomic , assign ) UIEdgeInsets edgeInsets;
@end
.m文件 需要重写方法: - ( void )drawTextInRect:(CGRect)rect
- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines{
UIEdgeInsetsinsets = self .edgeInsets;
CGRect rect = [ super textRectForBounds:UIEdgeInsetsInsetRect(bounds, insets)limitedToNumberOfLines:numberOfLines];
rect.origin.x -= insets.left;
rect.origin.y -= insets.top;
rect.size.width += (insets.left+ insets.right);
rect.size.height+= (insets.top+ insets.bottom);
return rect;
}
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流