zoukankan      html  css  js  c++  java
  • 计算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];  
      }  
  • 相关阅读:
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
    Learn Prolog Now 翻译
  • 原文地址:https://www.cnblogs.com/yulongjiayuan/p/5708131.html
Copyright © 2011-2022 走看看