本来以为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
- sizeThatFits and sizeToFit是UIView的两个方法, 官方文档上说:
- - (CGSize)sizeThatFits:(CGSize)size;
- 作用:return 'best' size to fit given size. does not actually resize view. Default is return existing view size
- - (void)sizeToFit;
- 作用: 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]; }