我通过使用以下代码计算文本的长度来创建具有动态高度的UILabel:
UILabel *bankFullName = [[UILabel alloc] init];
[bankFullName setLineBreakMode:NSLineBreakByWordWrapping];
[bankFullName setMinimumScaleFactor:1];
[bankFullName setNumberOfLines:0];
[bankFullName setFont:[UIFont systemFontOfSize:13]];
CGSize constraint1 = CGSizeMake(240.0f, 20000.0f);
CGSize size1 = [[bankDetail valueForKey:@"FullName"] sizeWithFont:[UIFont systemFontOfSize:13] constrainedToSize:constraint1 lineBreakMode:NSLineBreakByWordWrapping];
bankFullName.text = [bankDetail valueForKey:@"FullName"];
CGRect fullnameFrame = CGRectMake(15.0, 15.0, 240.0, size1.height);
bankFullName.frame = fullnameFrame;
现在我对代码没有任何问题,标签也很完美。
问题是当我记录bankFullName.frame.size.height
时,高度不对。如果标签有两行,则标签的高度为一行,依此类推。
关于如何获得标签的准确高度或者我正在做的事情是错误的任何想法?
感谢
答案 0 :(得分:1)
只要在任何视图的大小发生变化时调用-[UIView layoutSubviews]
,就可以记录此方法中标签的高度: -
-(void)layoutSubviews
{
[super layoutSubviews];
NSLog(@""... // log your label height to get the exact value.
}
答案 1 :(得分:0)
请勿使用sizeWithFont:
更改标签的高度。
请改用[bankFullName sizeToFit]
。并且不要忘记将最大行数设置为多个。
答案 2 :(得分:0)
您应该使用sizeThatFits:
来获取UILabel的正确大小,因为sizeWithFont
和boundingRectWithSize:options:attributes:context
不包含UILabel填充。
CGFloat height = [self.bankFullName sizeThatFits:CGSizeMake(240, MAXFLOAT)].height;
self.bankFullName.frame = CGRectMake(15, 15, 240, height);