UITableViewCell 自定义 CG 绘图 iOS 7

4

我有一个UITableViewCell的子类,它有以下的drawRect:实现。它会在单元格底部绘制一条线,缩进30点以匹配我们的设计。考虑到这种自定义绘制方法,tableView.separatorStyle被设置为UITableViewSeparatorStyleNone

- (void)drawRect:(CGRect)rect {
    [super drawRect:rect];

    if (!_hideBottomLine) {
        CGContextRef ref = UIGraphicsGetCurrentContext();
        CGContextSetShouldAntialias(ref, NO);

        CGContextSetStrokeColorWithColor(ref, [UIColor colorWithWhite:0.75 alpha:1].CGColor);
        CGContextSetLineWidth(ref, 1);
        CGContextMoveToPoint(ref, 30, CGRectGetMaxY(rect));
        CGContextAddLineToPoint(ref, CGRectGetMaxX(rect), CGRectGetMaxY(rect));
        CGContextStrokePath(ref);
    }
}

在iOS 6中,使用iOS 6 SDK构建时,这个方法非常好用,并且在iOS 7上也很好用。现在我正在使用iOS 7 SDK构建,但是这个方法不起作用了。
我是否错过了iOS 7 SDK中CG绘图的一些更改?
编辑:
所以我现在意识到,在iOS 7中有更好的方法可以使用cell.separatorInset,我还发现了一些其他类似的CG代码,它们可以正常工作。因此,我认为问题仅限于在UITableViewCell上实现drawRect:。
但是,我仍然想知道如何在iOS 7中对单元格进行自定义绘制。

这些行是否在单元格限制内?iOS7有一个新的子视图,可以将您添加到contentView中的任何内容剪裁到边界。 - Bms270
这些特别是在边缘,所以可能会像你说的那样被裁剪。然而,在另一个单元格中,我使用相同的技术绘制一个垂直线,但在iOS 7中没有显示。 - Chris Wagner
尝试移除iOS7中的隐藏裁剪机制,看会发生什么:[cell.contentView.superview setClipsToBounds:NO]; - Bms270
2个回答

3
尝试将背景颜色属性设置为透明色。
self.backgroundColor = [UIColor clearColor]

很奇怪。这使得图形出现在单元格中。您能否友好地解释一下为什么? - Houman
我认为自定义绘制会在背景视图中创建图像,但是单元格有内容视图,如果您没有设置透明颜色,则内容视图将显示在您的自定义背景下方。 - Antaresm
1
在iOS 7中,默认的背景视图是白色的。之前它是clearColor。 - MartinMoizard

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接