计算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];  
    }  

     

posted @ 2016-07-26 17:00  御龙家园  阅读(1095)  评论(0编辑  收藏  举报