UILabel的使用

1.自动适配

2.设置label 的边距

    NSMutableParagraphStyle *style =  [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
    style.alignment = NSTextAlignmentJustified;
    style.firstLineHeadIndent = 20.0f;
    style.headIndent = 10.0f;
    style.tailIndent = -10.0f;
     
    NSAttributedString *attrText = [[NSAttributedString alloc] initWithString:@"设置边距设置边距设置边距设置边距" attributes:@{ NSParagraphStyleAttributeName : style}];
     
    UILabel * label2 = [[UILabel alloc] initWithFrame:CGRectMake(20, 160, 200, 20)];
    label2.backgroundColor = [UIColor blueColor];
    label2.numberOfLines = 1;
    label2.attributedText = attrText;
    [self.view addSubview:label2];

3.关于限制最大宽度

设置最大宽度必须要设置为多行显示才起作用, 如果要显示单行可以设置一下高度为单行高度就可以了

    UILabel* contentLabel = [[UILabel alloc]init];
    [self.view addSubview:contentLabel];
    contentLabel.numberOfLines = 0;

    contentLabel.backgroundColor = [UIColor blueColor];

    contentLabel.text = @"奔跑的兔子奔跑的兔子奔跑的兔子奔跑的兔子";

    //设置最大宽度必须要设置为多行显示才起作用, 如果要显示单行可以设置一下高度为单行高度就可以了
    contentLabel.preferredMaxLayoutWidth = 200;
    [contentLabel mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.mas_equalTo(self.view).offset(20);
        make.top.mas_equalTo(self.view).offset(180);
    }];

4.富文本的使用

    // 初始化NSMutableAttributedString
    NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] init];

    // 设置字体格式和大小
    NSString *str0 = @"设置字体格式和大小";
    NSDictionary *dictAttr0 = @{NSFontAttributeName:[UIFont systemFontOfSize:14]};
    NSAttributedString *attr0 = [[NSAttributedString alloc] initWithString:str0
                                                                attributes:dictAttr0];
    [attributedString appendAttributedString:attr0];

    // 设置字体颜色
    NSString *str1 = @"\n设置字体颜色\n";
    NSDictionary *dictAttr1 = @{NSForegroundColorAttributeName:[UIColor purpleColor]};
    NSAttributedString *attr1 = [[NSAttributedString alloc] initWithString:str1
                                                                attributes:dictAttr1];
    [attributedString appendAttributedString:attr1];

    // 设置字体背景颜色
    NSString *str2 = @"设置字体背景颜色\n";
    NSDictionary *dictAttr2 = @{NSBackgroundColorAttributeName:[UIColor cyanColor]};
    NSAttributedString *attr2 = [[NSAttributedString alloc] initWithString:str2
                                                                attributes:dictAttr2];
    [attributedString appendAttributedString:attr2];

    /*
     注:NSLigatureAttributeName设置连体属性,取值为NSNumber对象(整数),1表示使用默认的连体字符,0表示不使用,2表示使用所有连体符号(iOS不支持2)。而且并非所有的字符之间都有组合符合。如 fly ,f和l会连起来。
     */
    //设置连体属性
    NSString *str3 = @"fly";
    NSDictionary *dictAttr3 = @{
                                NSFontAttributeName:[UIFont fontWithName:@"futura" size:14],
                                NSLigatureAttributeName:[NSNumber numberWithInteger:1]
                                };
    NSAttributedString *attr3 = [[NSAttributedString alloc]initWithString:str3
                                                               attributes:dictAttr3];
    [attributedString appendAttributedString:attr3];

    /*!
     注:NSKernAttributeName用来设置字符之间的间距,取值为NSNumber对象(整数),负值间距变窄,正值间距变宽
     */

    NSString *str4 = @"\n设置字符间距";
    NSDictionary *dictAttr4 = @{NSKernAttributeName:@(4)};
    NSAttributedString *attr4 = [[NSAttributedString alloc]initWithString:str4
                                                               attributes:dictAttr4];
    [attributedString appendAttributedString:attr4];

    /*!
     注:NSStrikethroughStyleAttributeName设置删除线,取值为NSNumber对象,枚举NSUnderlineStyle中的值。NSStrikethroughColorAttributeName设置删除线的颜色。并可以将Style和Pattern相互 取与 获取不同的效果
     */

    NSString *str51 = @"\n设置删除线为细单实线,颜色为红色";
    NSDictionary *dictAttr51 = @{
                                 NSStrikethroughStyleAttributeName:@(NSUnderlineStyleSingle),
                                 NSStrikethroughColorAttributeName:[UIColor redColor]
                                 };
    NSAttributedString *attr51 = [[NSAttributedString alloc]initWithString:str51
                                                                attributes:dictAttr51];
    [attributedString appendAttributedString:attr51];

    NSString *str52 = @"\n设置删除线为粗单实线,颜色为红色";
    NSDictionary *dictAttr52 = @{
                                 NSStrikethroughStyleAttributeName:@(NSUnderlineStyleThick),
                                 NSStrikethroughColorAttributeName:[UIColor redColor]
                                 };
    NSAttributedString *attr52 = [[NSAttributedString alloc]initWithString:str52
                                                                attributes:dictAttr52];
    [attributedString appendAttributedString:attr52];

    NSString *str53 = @"\n设置删除线为细单实线,颜色为红色";
    NSDictionary *dictAttr53 = @{
                                 NSStrikethroughStyleAttributeName:@(NSUnderlineStyleDouble),
                                 NSStrikethroughColorAttributeName:[UIColor redColor]
                                 };
    NSAttributedString *attr53 = [[NSAttributedString alloc]initWithString:str53
                                                                attributes:dictAttr53];
    [attributedString appendAttributedString:attr53];

    NSString *str54 = @"\n设置删除线为细单虚线,颜色为红色";
    NSDictionary *dictAttr54 = @{
                                 NSStrikethroughStyleAttributeName:@(NSUnderlineStyleSingle|NSUnderlinePatternDot),
                                 NSStrikethroughColorAttributeName:[UIColor redColor]
                                 };
    NSAttributedString *attr54 = [[NSAttributedString alloc]initWithString:str54
                                                                attributes:dictAttr54];
    [attributedString appendAttributedString:attr54];

    /*!
     NSStrokeWidthAttributeName 设置笔画的宽度,取值为NSNumber对象(整数),负值填充效果,正值是中空效果。NSStrokeColorAttributeName  设置填充部分颜色,取值为UIColor对象。
     设置中间部分颜色可以使用 NSForegroundColorAttributeName 属性来进行
     */
    //设置笔画宽度和填充部分颜色
    NSString *str6 = @"设置笔画宽度和填充颜色\n";
    NSDictionary *dictAttr6 = @{
                                NSStrokeWidthAttributeName:@(2),
                                NSStrokeColorAttributeName:[UIColor blueColor]
                                };
    NSAttributedString *attr6 = [[NSAttributedString alloc]initWithString:str6
                                                               attributes:dictAttr6];
    [attributedString appendAttributedString:attr6];

    //设置阴影属性,取值为NSShadow对象
    NSString *str7 = @"设置阴影属性\n";
    NSShadow *shadow = [[NSShadow alloc]init];
    shadow.shadowColor = [UIColor redColor];
    shadow.shadowBlurRadius = 1.0f;
    shadow.shadowOffset = CGSizeMake(1, 1);
    NSDictionary *dictAttr7 = @{NSShadowAttributeName:shadow};
    NSAttributedString *attr7 = [[NSAttributedString alloc]initWithString:str7
                                                               attributes:dictAttr7];
    [attributedString appendAttributedString:attr7];

    //设置文本特殊效果,取值为NSString类型,目前只有一个可用效果  NSTextEffectLetterpressStyle(凸版印刷效果)
//    NSString *str8 = @"设置特殊效果\n";
//    NSDictionary *dictAttr8 = @{NSTextEffectAttributeName:NSTextEffectLetterpressStyle};
//    NSAttributedString *attr8 = [[NSAttributedString alloc]initWithString:str8
//                                                               attributes:dictAttr8];
//    [attributedString appendAttributedString:attr8];

    //设置文本附件,取值为NSTextAttachment对象,常用于文字的图文混排
    NSString *str9 = @"文字的图文混排\n";
    NSTextAttachment *textAttachment = [[NSTextAttachment alloc]init];
    textAttachment.image = [UIImage imageNamed:@"logo"];
    textAttachment.bounds = CGRectMake(0, 0, 30, 30);
    NSDictionary *dictAttr9 = @{NSAttachmentAttributeName:textAttachment};
    NSAttributedString *attr9 = [[NSAttributedString alloc]initWithString:str9
                                                               attributes:dictAttr9];
    [attributedString appendAttributedString:attr9];

    /*!
     添加下划线 NSUnderlineStyleAttributeName。设置下划线的颜色 NSUnderlineColorAttributeName,对象为 UIColor。使用方式同删除线一样。
     */
    //添加下划线
    NSString *str10 = @"添加下划线\n";
    NSDictionary *dictAttr10 = @{
                                 NSUnderlineStyleAttributeName:@(NSUnderlineStyleSingle),
                                 NSUnderlineColorAttributeName:[UIColor redColor]
                                 };
    NSAttributedString *attr10 = [[NSAttributedString alloc]initWithString:str10
                                                                attributes:dictAttr10];
    [attributedString appendAttributedString:attr10];

    /*!
     NSBaselineOffsetAttributeName 设置基线偏移值。取值为NSNumber (float),正值上偏,负值下偏
     */
    //设置基线偏移值 NSBaselineOffsetAttributeName
    NSString *str11 = @"添加基线偏移值\n";
    NSDictionary *dictAttr11 = @{NSBaselineOffsetAttributeName:@(-10)};
    NSAttributedString *attr11 = [[NSAttributedString alloc]initWithString:str11
                                                                attributes:dictAttr11];
    [attributedString appendAttributedString:attr11];

    /*!
     NSObliquenessAttributeName 设置字体倾斜度,取值为 NSNumber(float),正值右倾,负值左倾
     */
    //设置字体倾斜度 NSObliquenessAttributeName
    NSString *str12 = @"设置字体倾斜度\n";
    NSDictionary *dictAttr12 = @{NSObliquenessAttributeName:@(0.5)};
    NSAttributedString *attr12 = [[NSAttributedString alloc]initWithString:str12
                                                                attributes:dictAttr12];
    [attributedString appendAttributedString:attr12];

    /*!
     NSExpansionAttributeName 设置字体的横向拉伸,取值为NSNumber (float),正值拉伸 ,负值压缩
     */
    //设置字体的横向拉伸 NSExpansionAttributeName
    NSString *str13 = @"设置字体横向拉伸\n";
    NSDictionary *dictAttr13 = @{NSExpansionAttributeName:@(0.5)};
    NSAttributedString *attr13 = [[NSAttributedString alloc]initWithString:str13
                                                                attributes:dictAttr13];
    [attributedString appendAttributedString:attr13];

    /*!
     NSWritingDirectionAttributeName 设置文字的书写方向,取值为以下组合
     @[@(NSWritingDirectionLeftToRight | NSWritingDirectionEmbedding)]
     @[@(NSWritingDirectionLeftToRight | NSWritingDirectionOverride)]
     @[@(NSWritingDirectionRightToLeft | NSWritingDirectionEmbedding)]
     @[@(NSWritingDirectionRightToLeft | NSWritingDirectionOverride)]

     ???NSWritingDirectionEmbedding和NSWritingDirectionOverride有什么不同
     */
    //设置文字的书写方向 NSWritingDirectionAttributeName
    NSString *str14 = @"设置文字书写方向\n";
    NSDictionary *dictAttr14 = @{NSWritingDirectionAttributeName:@[@(NSWritingDirectionRightToLeft | NSWritingDirectionEmbedding)]};
    NSAttributedString *attr14 = [[NSAttributedString alloc]initWithString:str14
                                                                attributes:dictAttr14];
    [attributedString appendAttributedString:attr14];

    /*!
     NSVerticalGlyphFormAttributeName 设置文字排版方向,取值为NSNumber对象(整数),0表示横排文本,1表示竖排文本  在iOS中只支持0
     */
    //设置文字排版方向 NSVerticalGlyphFormAttributeName
    NSString *str15 = @"设置文字排版方向\n";
    NSDictionary *dictAttr15 = @{NSVerticalGlyphFormAttributeName:@(0)};
    NSAttributedString *attr15 = [[NSAttributedString alloc]initWithString:str15
                                                                attributes:dictAttr15];
    [attributedString appendAttributedString:attr15];

    //段落样式
    NSMutableParagraphStyle *paragraph = [[NSMutableParagraphStyle alloc]init];
    //行间距
    paragraph.lineSpacing = 5;
    //段落间距
    paragraph.paragraphSpacing = 5;
    //对齐方式
    paragraph.alignment = NSTextAlignmentLeft;
    //指定段落开始的缩进像素
    paragraph.firstLineHeadIndent = 30;
    //调整全部文字的缩进像素
    paragraph.headIndent = 10;

    //添加段落设置
    [attributedString addAttribute:NSParagraphStyleAttributeName
                             value:paragraph
                             range:NSMakeRange(0, attributedString.length)];

    UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(60, 100, 300, 0)];
    label.backgroundColor = [UIColor lightGrayColor];
    //自动换行
    label.numberOfLines = 0;
    //设置label的富文本
    label.attributedText = attributedString;
    //label高度自适应
    [label sizeToFit];
    [self.view addSubview:label];

5,关于sizeThatFit与sizeToFit

sizeThatFit     return 'best' size to fit given size. does not actually resize view. Default is return existing view size

sizeToFit calls sizeThatFits: with current view bounds and changes bounds size.

sizeThatFits 传CGSizeZero的话得出的size 是单行的高度,宽度为全显示字符宽度

 sizeThatFits: 会计算出最优的 size 但是不会改变 自己的 size,而 sizeToFit: 会计算出最优的 size 而且会改变自己的 size。那么两者的联系是什么呢?

     当调用 sizeToFit 后会调用 sizeThatFits 方法来计算 UIView 的 bounds.size 然后改变 frame.size。

如下代码testLabel2 的高度会自动调整


    UILabel *testLabel1 = [[UILabel alloc] initWithFrame:CGRectMake(10, 100, 50, 20)];
    testLabel1.text = @"欢迎关注黄飞的csdn博客,这里有你想要的东西,欢迎关注!!ggg";
    testLabel1.font = [UIFont systemFontOfSize:14];
    testLabel1.textAlignment=NSTextAlignmentCenter;
    testLabel1.numberOfLines = 0;
        
    //使用sizeThatFit计算lable大小
    CGSize sizeThatFit = [testLabel1 sizeThatFits:CGSizeZero]; //(426, 17)
    testLabel1.frame = CGRectMake(testLabel1.frame.origin.x, testLabel1.frame.origin.y, sizeThatFit.width, sizeThatFit.height);

    testLabel1.textColor=[UIColor blackColor];
    testLabel1.backgroundColor=[UIColor yellowColor];
    [self.view addSubview:testLabel1];

    
    UILabel *testLabel2 = [[UILabel alloc] initWithFrame:CGRectMake(10, 200, 100, 20)];
    testLabel2.text = @"欢迎关注黄飞的csdn博客,这里有你想要的东西,欢迎关注!!";
    testLabel2.font = [UIFont systemFontOfSize:14];
    testLabel2.textAlignment=NSTextAlignmentCenter;
    testLabel2.numberOfLines = 0;

    [testLabel2 sizeToFit];

    testLabel2.textColor=[UIColor blackColor];
    testLabel2.backgroundColor=[UIColor yellowColor];
    [self.view addSubview:testLabel2];

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值