自定义UITableViewCell上的UITableViewAutomaticDimension

时间:2015-09-01 13:45:40

标签: ios objective-c uitableview

我在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];
}

1 个答案:

答案 0 :(得分:1)

如果你正在做这样的事情。结合大小类自动布局的技术,可以非常简单地解决问题。否则,当您想以手动方式执行此操作时,需要进行大量重绘和计算。此外,当您使用UITableViewAutomaticDimension时,您也应该采用这种方式,因为此标志仅表示iOS应通过自动布局自动计算单元格高度。