计算UILabel / UITableViewCell的多行文本高度:在计算vs实际绘图时会得到不同的结果
这个一般的话题在这里被多次提出:如何使用不同数量的文本渲染UITableViewCells,从而改变高度。 规范的答案是:你使用sizeWithFont来计算heightForRowAtIndexPath中的表视图控制器委托中的高度:constrainedToSize:lineBreakMode :. 稍后,单元格会被绘制,如果需要的话,您可以使用[label sizeToFit]之类的东西,所有的东西都像魔术一样。
我的问题:我正在包装一些单元格,因为sizeWithFont:从实际绘图返回不同的尺寸。
一个具体的例子:
原文是这样的:“人们忘记了@BillGates在1993年从NEC那里买了一块性感厚度为1/4英寸的板子,不pipe这个星期发生什么事情都不是关于硬件的!
CGSize theSize = [text sizeWithFont:[UIFont systemFontOfSize:17.0f] constrainedToSize:CGSizeMake(310.0f, FLT_MAX) lineBreakMode:UILineBreakModeWordWrap]; NSLog(@"calculated size for %@: %f, %f",text, theSize.width, theSize.height);
这返回:306.000000,84.000000。 (即4行,17px字体和4px行间距,21px领先。)好。
但是,后来实际绘制单元时:
label = (UILabel *)[cell viewWithTag:3]; label.text = [NSString stringWithFormat:@"%@", text]; label.lineBreakMode = UILineBreakModeWordWrap; label.font = [UIFont systemFontOfSize:17.0f]; CGSize labelSize; labelSize = label.frame.size; NSLog(@"label size before resizing: %f, %f", labelSize.width, labelSize.height); [label sizeToFit]; labelSize = label.frame.size; NSLog(@"label size after resizing: %f, %f for text %@", labelSize.width, labelSize.height,text);
(UILabel作为NIB的UITableViewCell的一部分加载,在IB中我将它设置为310px宽。)
这应该返回与上面完全一样的大小。 相反,我得到281.000000,105.000000作为sizeToFit调用后的尺寸。 现在是5点,而不是4点,文字溢出,我看到UI中的溢出。
所以,对于同样的文字,我得到了两个不同的维度计算,并不能算出来。 这是关于UILabel吗? 它有一些内部边缘吗? 这一直在发生的一些文本,而不是其他人,我没有追踪到一些特定的string; 似乎随机。 这个主题强调有两个处理过程:计算高度与实际绘图。 这与我所看到的一致。 但是我不明白究竟发生了什么或者如何解决这个问题。
问题:为什么我看到两种不同的计算大小,我该如何解决?
当然,解决scheme显然是30秒后发布。 也许对别人有用…
sizeWithFont:
的大小是正确的。 我以上述方式计算的大小不正确,因为[label sizeToFit]
减less了标签框架的宽度。 在随后的调用相同的代码时,它开始了可能已经被减less的帧。
解决的办法是简单地将框架width
重新设置为已知的宽度,然后再resize以适应:
CGRect labelFrame = label.frame; labelFrame.size.width = 310; label.frame = labelFrame; [label sizeToFit];
对于多行标签,你需要设置
cell.textLabel.numberOfLines = 0;
接着
[cell.textLabel sizeToFit];
但为了美观,你需要添加一些填充像素。 而你的应用程序将是真棒!
titleSize = [title sizeWithFont:[UIFont systemFontOfSize:(CGFloat)17.0] constrainedToSize:CGSizeMake(280, 2000) lineBreakMode:NSLineBreakByWordWrapping];
- targetContentOffsetForProposedContentOffset:withScrollingVelocity无子类化UICollectionViewFlowLayout
- 如何使用iOS上的原生Twitter应用程序打开Twitter推文?
- 如何在XCode中减less编译时间/加快编译时间?
- UIImagePickerController不填充屏幕
- iOS 6应用程序 – 如何处理iPhone 5的屏幕大小?
- 在解散另一个之后立即呈现模态视图控制器
- iPhone:团队代理以外的其他开发人员可以构build应用程序进行分发
- iPhone核心animation – 绘制一个圈子
- ld:找不到符号dyld_stub_binding_helper,通常在crt1.o / dylib1.o / bundle1.o中用于架构i386 xcode 5