• ios label 自动计算行高详解


    在OC当中自动计算行高主要调用系统的

    - (--boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(nullable NSDictionary<NSString *, id> *)attributes context:(nullable NSStringDrawingContext *)context NS_AVAILABLE(10_11, 7_0);

    不同的ios系统下 相同字体的高度大小是不同的 所以不能设置具体的高度值来做限制 

    解决办法:

    复制代码
        label.text = @"xijoaiogioaiogioioaig";
        label.numberOfLines = 2;
        NSMutableParagraphStyle *style = [[NSMutableParagraphStyle alloc]init];
        style.maximumLineHeight = 20;
        style.minimumLineHeight = 20;
        CGRect rect = [label.text boundingRectWithSize:CGSizeMake(Screen_W - 125, 20*2) options: NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:_comName.font,NSParagraphStyleAttributeName:style} context:nil];
        _height = rect.size.height;
    复制代码

     

     

    下面是对该方法的详解

    size:label或文本显示的宽高,通常在自动计算宽高时 若宽度固定为某一值100 则设置为CGSizeMake (100,MAXFLOAT) 若高度固定为某一值100,则设置为CGSizeMake (MAXFLOAT,100)若宽高都确定则都设置为具体值

     

    options:

    文本绘制时的附加选项。
    有四种类型:
    1.NSStringDrawingTruncatesLastVisibleLine
    2.NSStringDrawingUsesLineFragmentOrigin
    3.NSStringDrawingUsesFontLeading
    4.NSStringDrawingUsesDeviceMetrics
    通常使用NSStringDrawingUsesLineFragmentOriginNSStringDrawingUsesLineFragmentOrigin,整个文本将以每行组成的矩形为单位计算整个文本的尺寸。

    NSStringDrawingUsesFontLeading则以字体间的行距(leading,行距:从一行文字的底部到另一行文字底部的间距。)来计算。

    NSStringDrawingTruncatesLastVisibleLine或者NSStringDrawingUsesDeviceMetric,那么计算文本尺寸时将以每个字或字形为单位来计算。

    attributes:根本文字的哪一种属性来进行计算

    context:文字显示的像素 一般传nil采用系统默认

    注:使用该方法时, 动态计算高度 不能设置adjustToSize(该方法限制为一行)

  • 相关阅读:
    JS判断对象中是否存在某参数
    JS通过url下载文件
    .NET CORE LinQ查询中计算时间差
    C# 判断某个时间是星期几
    C#数组去重
    python Tank
    kubeflannel.yml Tank
    片言只语 Tank
    other Tank
    ERROR大集合 Tank
  • 原文地址:https://www.cnblogs.com/weijie-1/p/6201729.html
Copyright © 2020-2023  润新知