UILable是UIKit下的控件,继承UIView,是iOS开发常用的控件。
项目中一般的用法:
CGRect rect=CGRectMake(20, 100, 350, 40); //(x,y,width,height)
UILabel *label=[[UILabel alloc] initWithFrame:rect];//创建控件,并设置相对父视图右上角的位置
label.backgroundColor=[UIColor lightGrayColor];//标签的背景颜色
label.textAlignment=NSTextAlignmentCenter;//标签文字的对齐方式
label.textColor=[UIColor blackColor];//标签文字的颜色
label.font=[UIFont systemFontOfSize:18.0];//标签文字的字体大小
label.text=@"这里是设置标签显示的内容,为字符串";//标签文字显示的内容
[self.view addSubview:label];//将标签添加到父视图中
屏幕快照 2017-11-02 16.58.49.png
多行显示
如果标签内容很长,需要全部显示,这个时候,我们需要多行显示
label.text=@"这里是设置标签显示的内容,为字符串,胜利大街方式肯定九分裤水电费健身卡的房价上岛咖啡牲口的尖峰时刻的房价是快递费健身卡老地方杀戮空间都烦死了快递费技术领导开发计算楼房";//标签文字显示的内容
我们需要这么设置
CGRect rect=CGRectMake(20, 100, 350,120); //(x,y,width,height) 调整标签高度
label.numberOfLines=0;//根据内容显示多行,因为行数不是固定,需要设置为0
label.lineBreakMode=NSLineBreakByCharWrapping;//需要设置换行转折的方式
屏幕快照 2017-11-02 17.18.25.png
多行显示成功了!换行方式这个,大家要留意一下,是有这几种方式
//换行方式
typedef NS_ENUM(NSInteger, NSLineBreakMode) {
NSLineBreakByWordWrapping = 0, // 以单词为单位换行, 默认方式
NSLineBreakByCharWrapping, // 以字符为单位换行(换行时单词可能被分割)
NSLineBreakByClipping, // Simply clip
NSLineBreakByTruncatingHead, // 多行显示不完整时会以: "...wxyz"最后一行开头省略号,省略中间部分
NSLineBreakByTruncatingTail, // 多行显示不完整时会以: "abc..."最后一行末尾省略号,省略剩余部分
NSLineBreakByTruncatingMiddle // 多行显示不完整时会以: "ab..yz."最后一行中间省略号,省略中间部分
} NS_ENUM_AVAILABLE(10_0, 6_0);
动态计算标签的高度或宽度
在实际项目中,会遇到标签显示内容是接口获取,这个时候要想将标签内容显示完整,就需要动态计算标签所需的高度或宽度
固定宽度,动态获取高度
//iOS 7之前的方法
CGSize titleSize = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(350, MAXFLOAT)];
label.frame=CGRectMake(20, 100, 350,titleSize.height);
//iOS 7之后的方法
NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
[style setLineBreakMode:NSLineBreakByCharWrapping];
[style setAlignment:NSTextAlignmentLeft];
NSDictionary *dic = @{NSFontAttributeName: label.font,NSParagraphStyleAttributeName: style};
CGSize titleSize = [label.text boundingRectWithSize:CGSizeMake(350, MAXFLOAT) options:(NSStringDrawingUsesLineFragmentOrigin) attributes:dic context:nil].size;
label.frame=CGRectMake(20, 100, 350,titleSize.height);
固定高度,动态获取宽度
//iOS 7之前的方法
CGSize titleSize = [label.text sizeWithFont:label.font constrainedToSize:CGSizeMake(MAXFLOAT, 40)];
label.frame=CGRectMake(20, 100,titleSize.width ,40);
//iOS 7之后的方法
NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc] init];
[style setLineBreakMode:NSLineBreakByCharWrapping];
[style setAlignment:NSTextAlignmentLeft];
NSDictionary *dic = @{NSFontAttributeName: label.font,NSParagraphStyleAttributeName: style};
CGSize titleSize = [label.text boundingRectWithSize:CGSizeMake(MAXFLOAT, 40) options:(NSStringDrawingUsesLineFragmentOrigin) attributes:dic context:nil].size;
label.frame=CGRectMake(20, 100,titleSize.width ,40);
标签字体间距、行间距的设置
项目中,有时为了UI布局的美观,需要调整字间距、行间距
CGRect rect=CGRectMake(20, 100, 350,100); //(x,y,width,height)
UILabel *label=[[UILabel alloc] initWithFrame:rect];//创建控件,并设置相对父视图右上角的位置
label.backgroundColor=[UIColor lightGrayColor];//标签的背景颜色
label.textAlignment=NSTextAlignmentLeft;//标签文字的对齐方式
label.textColor=[UIColor blackColor];//标签文字的颜色
label.font=[UIFont systemFontOfSize:18.0];//标签文字的字体大小
label.text=@"这里是设置标签显示的内容,为字符串,胜利大街方式肯定九分裤水电费健身卡的房价上岛咖啡牲口的尖峰时刻的房价是快递费健身卡老地方杀戮空间都烦死了快递费技术领导开发计算楼房";//标签文字显示的内容
[self.view addSubview:label];//将标签添加到父视图中
label.numberOfLines=0;
label.lineBreakMode=NSLineBreakByTruncatingTail;
NSDictionary *dic = @{NSKernAttributeName:@10.f
};//字间距
NSMutableAttributedString * attributedString = [[NSMutableAttributedString alloc] initWithString:label.text attributes:dic];
NSMutableParagraphStyle * paragraphStyle = [[NSMutableParagraphStyle alloc] init];
[paragraphStyle setLineSpacing:30];//行间距
[attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [label.text length])];
[label setAttributedText:attributedString];
[label sizeToFit];//lable自动适配
屏幕快照 2017-11-03 10.21.34.png
上面一段代码,也能看到UILable的另一种高度的适配方法 [label sizeToFit] (注:可以设置高度固定,适配宽度吗?)
标签中部分字体属性设置
某个范围字体变色,例如“胜利大街”
//要变色的范围
NSRange blueRange=NSMakeRange([label.text rangeOfString:@"胜利大街"].location, [label.text rangeOfString:@"胜利大街"].length);
//设置变色(蓝色)
[attributedString addAttribute:NSForegroundColorAttributeName value:[UIColor blueColor] range:blueRange];
直接在上面设置间距的代码中插入这段代码,可以得到下图效果:
屏幕快照 2017-11-03 10.45.18.png
可能你注意到了,间距、标签字体不同颜色设置用到了NSParagraphStyleAttributeName、NSForegroundColorAttributeName这两个关键词,类似键值NSAttributedString中还有
// 属性文本的键值
NSFontAttributeName 设置字体属性,默认值:字体:Helvetica(Neue) 字号:12
NSForegroundColorAttributeName 设置字体颜色,取值为 UIColor对象,默认值为黑色
NSBackgroundColorAttributeName 设置字体所在区域背景颜色,取值为 UIColor对象,默认值为nil, 透明色
NSLigatureAttributeName 设置连体属性,取值为NSNumber 对象(整数),0 表示没有连体字符,1 表示使用默认的连体字符
NSKernAttributeName 设定字符间距,取值为 NSNumber 对象(整数),正值间距加宽,负值间距变窄
NSStrikethroughStyleAttributeName 设置删除线,取值为 NSNumber 对象(整数)
NSStrikethroughColorAttributeName 设置删除线颜色,取值为 UIColor 对象,默认值为黑色
NSUnderlineStyleAttributeName 设置下划线,取值为 NSNumber 对象(整数),枚举常量 NSUnderlineStyle中的值,与删除线类似
NSUnderlineColorAttributeName 设置下划线颜色,取值为 UIColor 对象,默认值为黑色
NSStrokeWidthAttributeName 设置笔画宽度,取值为 NSNumber 对象(整数),负值填充效果,正值中空效果
NSStrokeColorAttributeName 填充部分颜色,不是字体颜色,取值为 UIColor 对象
NSShadowAttributeName 设置阴影属性,取值为 NSShadow 对象
NSTextEffectAttributeName 设置文本特殊效果,取值为 NSString 对象,目前只有图版印刷效果可用:
NSBaselineOffsetAttributeName 设置基线偏移值,取值为 NSNumber (float),正值上偏,负值下偏
NSObliquenessAttributeName 设置字形倾斜度,取值为 NSNumber (float),正值右倾,负值左倾
NSExpansionAttributeName 设置文本横向拉伸属性,取值为 NSNumber (float),正值横向拉伸文本,负值横向压缩文本
NSWritingDirectionAttributeName 设置文字书写方向,从左向右书写或者从右向左书写
NSVerticalGlyphFormAttributeName 设置文字排版方向,取值为 NSNumber 对象(整数),0 表示横排文本,1 表示竖排文本
NSLinkAttributeName 设置链接属性,点击后调用浏览器打开指定URL地址
NSAttachmentAttributeName 设置文本附件,取值为NSTextAttachment对象,常用于文字图片混排
NSParagraphStyleAttributeName 设置文本段落排版格式,取值为 NSParagraphStyle 对象
UILable控件类的属性
@class UIColor, UIFont;
NS_CLASS_AVAILABLE_IOS(2_0) @interface UILabel : UIView <NSCoding, UIContentSizeCategoryAdjusting>
//NSCoding表示支持解归档
//该UIContentSizeCategoryAdjusting协议提供了adjustsFontForContentSizeCategory可用于确定在设备UIContentSizeCategory更改时采用元素是否应更新其字体的属性。
//UILable显示内容
@property(nullable, nonatomic,copy) NSString *text; // default is nil
//字体
@property(null_resettable, nonatomic,strong) UIFont *font; // default is nil (system font 17 plain)
//字体颜色
@property(null_resettable, nonatomic,strong) UIColor *textColor; // default is nil (text draws black)
//阴影颜色
@property(nullable, nonatomic,strong) UIColor *shadowColor; // default is nil (no shadow)
//阴影偏移量
@property(nonatomic) CGSize shadowOffset; // default is CGSizeMake(0, -1) -- a top shadow
//字体对齐方式
@property(nonatomic) NSTextAlignment textAlignment; // default is NSTextAlignmentNatural (before iOS 9, the default was NSTextAlignmentLeft)
//多行文字换行方式
@property(nonatomic) NSLineBreakMode lineBreakMode; // default is NSLineBreakByTruncatingTail. used for single and multiple lines of text
// the underlying attributed string drawn by the label, if set, the label ignores the properties above.
//文本属性
@property(nullable, nonatomic,copy) NSAttributedString *attributedText NS_AVAILABLE_IOS(6_0); // default is nil
// the 'highlight' property is used by subclasses for such things as pressed states. it's useful to make it part of the base class as a user property
//高亮文字颜色(使用场景,例如cell点击后,其上Labal的字体颜色变化,通过highlighted属性控制)
@property(nullable, nonatomic,strong) UIColor *highlightedTextColor; // default is nil
//是否高亮
@property(nonatomic,getter=isHighlighted) BOOL highlighted; // default is NO
//是否可交互
@property(nonatomic,getter=isUserInteractionEnabled) BOOL userInteractionEnabled; // default is NO
//设置文字是否可变
@property(nonatomic,getter=isEnabled) BOOL enabled; // default is YES. changes how the label is drawn
// this determines the number of lines to draw and what to do when sizeToFit is called. default value is 1 (single line). A value of 0 means no limit
// if the height of the text reaches the # of lines or the height of the view is less than the # of lines allowed, the text will be
// truncated using the line break mode.
//内容过多时,分几行显示,自适应时设置为0
@property(nonatomic) NSInteger numberOfLines;
// these next 3 properties allow the label to be autosized to fit a certain width by scaling the font size(s) by a scaling factor >= the minimum scaling factor
// and to specify how the text baseline moves when it needs to shrink the font.
//文字过多时,是否缩小文字以适应固定宽度
@property(nonatomic) BOOL adjustsFontSizeToFitWidth; // default is NO
@property(nonatomic) UIBaselineAdjustment baselineAdjustment; // default is UIBaselineAdjustmentAlignBaselines
/**
UIBaselineAdjustmentAlignBaselines=0,默认,文本最上端与中线对齐。
UIBaselineAdjustmentAlignCenters, 文本中线与label中线对齐。
UIBaselineAdjustmentNone, 文本最低端与label中线对齐。
**/
//设置最小字体,与minimumFontSize相同,minimumFontSize在IOS 6后不能使用。
@property(nonatomic) CGFloat minimumScaleFactor NS_AVAILABLE_IOS(6_0); // default is 0.0
// Tightens inter-character spacing in attempt to fit lines wider than the available space if the line break mode is one of the truncation modes before starting to truncate.
// The maximum amount of tightening performed is determined by the system based on contexts such as font, line width, etc.
//收缩字符间距允许截断
@property(nonatomic) BOOL allowsDefaultTighteningForTruncation NS_AVAILABLE_IOS(9_0); // default is NO
// override points. can adjust rect before calling super.
// label has default content mode of UIViewContentModeRedraw
//重写UILabel布局
- (CGRect)textRectForBounds:(CGRect)bounds limitedToNumberOfLines:(NSInteger)numberOfLines;
- (void)drawTextInRect:(CGRect)rect;
// Support for constraint-based layout (auto layout)
// If nonzero, this is used when determining -intrinsicContentSize for multiline labels
//这个属性是用来设置多行label的最大宽度的
//当自动布局的时候约束这个label的时候这个属性会起作用
//在自动布局添加约束中,若文本超过了指定的最大宽度的时候 文本会另起一行 从而增加了label的高度
@property(nonatomic) CGFloat preferredMaxLayoutWidth NS_AVAILABLE_IOS(6_0);
// deprecated:
//设置最小字体minimumFontSize在IOS 6后不能使用。
roperty(nonatomic)
CGFloat minimumFontSize NS_DEPRECATED_IOS(2_0, 6_0) __TVOS_PROHIBITED; // deprecated - use minimumScaleFactor. default is 0.0
// Non-functional. Hand tune by using NSKernAttributeName to affect tracking, or consider using the allowsDefaultTighteningForTruncation property.
@property(nonatomic) BOOL adjustsLetterSpacingToFitWidth NS_DEPRECATED_IOS(6_0,7_0) __TVOS_PROHIBITED;
@end
一些常用的第三方Lable控件
TTTAttributedLabel
TYAttributedLabel
SDAutoLayout
LTMorphingLabel(swift)
网友评论