• 计算label的行数


    本来以为label有个属性可以获得总行数,可是一直没找到,翻阅了些资料好像没发现,都是根据自己的计算得来的,计算就计算吧.

    大家第一想到的基本思路肯定就是利用label总高度除以每一行的高度.那么我们要怎么获取文字的总高度呢,很多人第一想到的应该是

    1方法:

    boundingRectWithSize:<#(CGSize)#> options:<#(NSStringDrawingOptions)#> attributes:<#(nullable NSDictionary<NSString *,id> *)#> context:<#(nullable NSStringDrawingContext *)#>

    这个方法这里我就不多说了,他是根据文字内容/字体/显示的最大宽度,来算高度的,一试一个准,但我今天要使用的是另一个方法

    2方法:

    sizeThatFits:<#(CGSize)#>

    这个是直接拿label来调用的,并且label已经有文字内容

    [self.valueLabel sizeThatFits:CGSizeMake(self.valueLabel.frame.size.width, MAXFLOAT)].height

    最后,我们要怎么获取每一行的高度呢? UIFont 里面有个属性 lineHeight  就能获取对应字体的行高   由此,我们就能算出label的高度了  我测了一到几十行的算的都是准确的,不知道多了会不会不准(哈哈),我这里用到的文字不会很多,所以满足我的需求,亲们要是害怕,可以多多测试~~

    NSInteger lines = [self.valueLabel sizeThatFits:CGSizeMake(self.valueLabel.frame.size.width, MAXFLOAT)].height / self.valueLabel.font.lineHeight;

    在这里顺便提一下 sizeToFit 他是根据内容来填充view让view有了尺寸,比如我们创建了按钮,设置了xy,设置文字内容,不需要设置按钮的size,只需调用sizeToFit就能让按钮显示了,这个方法是会真真切切的影响到控件的尺寸的. 但是sizeThatFit不会改变控件原来的尺寸

    这里给个别人测试的例子   http://blog.csdn.net/meegomeego/article/details/21954961

    1. sizeThatFits and sizeToFit是UIView的两个方法, 官方文档上说:   
    2. - (CGSize)sizeThatFits:(CGSize)size;       
    3. 作用:return 'best' size to fit given size. does not actually resize view. Default is return existing view size  
    4. - (void)sizeToFit;       
    5. 作用: calls sizeThatFits: with current view bounds and changes bounds size.
      - (void)viewDidLoad  
      {  
          [super viewDidLoad];  
          UIView *view = [[UIView alloc] initWithFrame:CGRectMake(100, 100, 200, 100)];  
          view.backgroundColor = [UIColor yellowColor];  
          UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(5, 5, 0, 0)];  
          [label setFont:[UIFont systemFontOfSize:20]];  
          label.text = @"hello wdszgrf";  
          CGSize sizeThatFits = [label sizeThatFits:CGSizeZero];  
          NSLog(@"---- %f  %f ----", sizeThatFits.width, sizeThatFits.height);     
          // output:  ---- 117.000000  24.000000 ----  
        
          NSLog(@"**** %f  %f ****", label.frame.size.width, label.frame.size.height);     
          // output:  **** 0.000000  0.000000 **** 说明sizeThatSize并没有改变原始label的大小  
         
          [label sizeToFit];  // 这样搞就直接改变了这个label的宽和高,使它根据上面字符串的大小做合适的改变  
          [label setCenter:CGPointMake(80, 50)];  
          NSLog(@"==== %f %f ====", label.frame.size.width, label.frame.size.height);       
          // output:   ==== 117.000000 24.000000 ====   
        
          [view addSubview:label];  
          [self.view addSubview:view];  
      }  
  • 相关阅读:
    tfrecord
    数据挖掘模型中的IV和WOE详解
    GBDT
    tensorflow笔记 :常用函数说明
    GAN
    牛客挑战赛 39 牛牛与序列 隔板法 容斥 dp
    4.19 省选模拟赛 跳跃 倍增 二分 线段树 建图
    牛客挑战赛39 牛牛的等差数列
    luogu P6224 [BJWC2014]数据 KD-tree 标准板子 重构+二维平面内最近最远距离查询
    牛客挑战赛39 D 牛牛的数学题 NTT FMT FWT
  • 原文地址:https://www.cnblogs.com/yulongjiayuan/p/5708131.html
Copyright © 2020-2023  润新知