我在UITableViewAutomaticDimension
中使用UILabel
用于多行UITableViewCell
,一切正常,在iPhone上运行正常。要在iPad上的表格视图中添加边距,我正在使用覆盖setFrame
的自定义子类:
- (void)setFrame:(CGRect)frame {
if (IS_IPAD) {
CGFloat inset = 100;
frame.origin.x += inset;
frame.size.width -= 2 * inset;
}
[super setFrame:frame];
}
问题是,UITableViewAutomaticDimension
正在为iPad上的单元格返回错误(太小)的高度,标签会被切断。我假设它返回了为整个宽度计算的高度。
有没有办法让表格视图计算出正确的高度?
修改 发现了一个相当hacky的解决方案,但是在设置attributionText
时这不起作用- (void)setFrame:(CGRect)frame {
if (IS_IPAD) {
CGFloat inset = 100;
frame.origin.x += inset;
frame.size.width -= 2 * inset;
for (UIView *subview in self.contentView.subviews) {
if ([subview isKindOfClass:[UILabel class]]) {
UILabel *label = (UILabel *)subview;
if (label.numberOfLines == 0) {
label.preferredMaxLayoutWidth = frame.size.width;
}
}
}
}
[super setFrame:frame];
}
答案 0 :(得分:1)
如果你正在做这样的事情。结合大小类和自动布局的技术,可以非常简单地解决问题。否则,当您想以手动方式执行此操作时,需要进行大量重绘和计算。此外,当您使用UITableViewAutomaticDimension
时,您也应该采用这种方式,因为此标志仅表示iOS应通过自动布局自动计算单元格高度。