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];  
      }  
  • 相关阅读:
    Tomcat配置JMX远程监控(Windown7 Linxu)
    Maven Tomcat:run 使用tomcat7
    关于C3P0容错和自动重连特性的研究
    密码算法记录
    Linxu 安装Nignx
    Linxu Yum方式安装Mysql
    Linxu
    tomcat结合nginx使用小结
    Tomcat性能优化(三) Executor配置
    深入学习C#匿名函数、委托、Lambda表达式、表达式树类型——Expression tree types
  • 原文地址:https://www.cnblogs.com/yulongjiayuan/p/5708131.html
Copyright © 2011-2022 走看看