UILabel作為一個展示文字的控件,功能比較強大淮椰,可以展示普通文本横缔,富文本,多行文字己肮。
1.初始化UILabel
UILabel *titleLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 100, 50)];
titleLabel.text = @"test";
2.屬性介紹
//設(shè)置label的文字
titleLabel.text = @"我的測試文字";
//設(shè)置label的字體
titleLabel.font = [UIFont systemFontOfSize:12];
//設(shè)置label的顏色
//default is nil (text draws black)
titleLabel.textColor = [UIColor grayColor];
//設(shè)置label的陰影顏色和偏移
titleLabel.shadowColor = [UIColor redColor]; titleLabel.shadowOffset = CGSizeMake(10, 10);
//設(shè)置文字對齊方式
titleLabel.textAlignment = UITextAlignmentLeft;//文字靠左
titleLabel.textAlignment = UITextAlignmentCenter;//文字居中
titleLabel.textAlignment = UITextAlignmentRight;//文字靠右
//設(shè)置文案的換行模式
titleLabel.lineBreakMode = NSLineBreakByTruncatingTail;//截取末尾
typedef NS_ENUM(NSInteger, NSLineBreakMode) {
NSLineBreakByWordWrapping = 0, // Wrap at word boundaries, default
NSLineBreakByCharWrapping, // Wrap at character boundaries
NSLineBreakByClipping, // Simply clip
NSLineBreakByTruncatingHead, // Truncate at head of line: "...wxyz" //截取頭部
NSLineBreakByTruncatingTail, // Truncate at tail of line: "abcd..." 截取末尾
NSLineBreakByTruncatingMiddle // Truncate middle of line: "ab...yz" 截取中間
}
//設(shè)置富文本
titleLabel.attributedText = [[NSAttributedString alloc] initWithString:@"我是富文本"];
//設(shè)置高亮狀態(tài)相關(guān)
titleLabel.highlightedTextColor = [UIColor greenColor];
titleLabel.highlighted = YES;
//label 交互以及是否可用
//默認(rèn)不能交互士袄,如添加手勢不生效
titleLabel.userInteractionEnabled = YES;
titleLabel.enabled = YES;
//設(shè)置label顯示的行數(shù)
//0表示顯示任意行
titleLabel.numberOfLines = 0;
//設(shè)置label是否自適應(yīng)字體大小
titleLabel.adjustsFontSizeToFitWidth = YES;
//設(shè)置label基線對齊方式(當(dāng)adjustsFontSizeToFitWidth= YES時生效)
//默認(rèn)對齊方式
typedef enum {
UIBaselineAdjustmentAlignBaselines, //默認(rèn)值文本最上端與label中間線對齊
UIBaselineAdjustmentAlignCenters, //text中間與label中間線對齊
UIBaselineAdjustmentNone, //text最低端與label中間線對齊
} UIBaselineAdjustment;
titleLabel.baselineAdjustment = UIBaselineAdjustmentAlignBaselines;
//設(shè)置最小縮放字體(當(dāng)adjustsFontSizeToFitWidth= YES,指定了最小縮放字體)
titleLabel.minimumScaleFactor = 20;
//label截斷是否緊縮文字
//The default value of this property is NO.
titleLabel.allowsDefaultTighteningForTruncation = YES;
3.使用技巧
1.設(shè)置文字的時候,通過 [titleLabel sizeToFit]可以自適應(yīng)文字谎僻。
NOTE
:在sizeToFit之前需要指定label的寬度娄柳。
2.當(dāng)需要根據(jù)字體和文字大小自適應(yīng)的時候,可以使用adjustsFontSizeToFitWidth
屬性艘绍,進行給定寬高適配赤拒。
NOTE:默認(rèn)文字頂部和中心對齊,可以設(shè)置titleLabel.baselineAdjustment = UIBaselineAdjustmentAlignBaselines; 解決诱鞠。
也可以使用NSString的方法,計算出適應(yīng)字體的大小挎挖,不過這個接口在iOS7廢棄了。
//通過指定字體航夺,設(shè)置最小字體蕉朵,寬度,以及換行模式阳掐,返回對應(yīng)的字體始衅。
CGFloat fontSizeThatFits;
[tempString sizeWithFont: [UIFont systemFontOfSize:12] minFontSize:20 actualFontSize:&fontSizeThatFits forWidth:self.cg_width lineBreakMode:NSLineBreakByWordWrapping];
3.當(dāng)照片和文字需要顯示在多行一起顯示的時候堪伍,可以通過富文本顯示。
NOTE:
單純的照片可以使用NSTextAttachment,復(fù)雜的交互可以使用CoreText觅闽。
UIImage *image = [UIImage imageWithColor:[UIColor clearColor]];;
NSTextAttachment *attach = [[NSTextAttachment alloc] init];
attach.image = image;
attach.bounds = CGRectMake(0, 0, 0, 20);
NSAttributedString *textAttachmentString = [NSAttributedString attributedStringWithAttachment:attach];