UITableViewCell 自定义CG绘制iOS 7

Posted

技术标签:

【中文标题】UITableViewCell 自定义CG绘制iOS 7【英文标题】:UITableViewCell custom CG drawing iOS 7 【发布时间】:2013-09-19 00:06:41 【问题描述】:

我有一个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 SDK 构建时,这在 iOS 6 和 iOS 7 上运行良好。现在我正在使用 iOS 7 SDK 构建该行并没有出现。

我是否错过了 iOS 7 SDK 中 CG 绘图的一些变化?

编辑:

所以我现在意识到在 iOS 7 中使用cell.separatorInset 有更好的方法来做到这一点,我还发现了一些我编写的其他类似的 CG 代码。所以我认为这个问题与在UITableViewCell 上实现drawRect: 无关

不过,我仍然想知道如何在 iOS 7 中对单元格进行自定义绘图。

【问题讨论】:

这些行是否在单元格限制内? iOS7 有一个新的子视图,可以将您添加到 contentView 的任何内容剪辑到边界。 这些特别是在边缘,所以它们可能会像你说的那样被剪掉。但是,我在另一个单元格中使用了相同的技术,我在单元格的中心绘制了一条垂直线,该线在 iOS 7 中没有显示。 试试把iOS7中隐藏的裁剪机制去掉看看会发生什么:[cell.contentView.superview setClipsToBounds:NO]; 【参考方案1】:

尝试将背景颜色属性设置为透明色

self.backgroundColor = [UIColor clearColor]

【讨论】:

好奇怪。这使绘图出现在单元格中。你能解释一下原因吗? 我认为,自定义绘制在背景视图中制作图像,但单元格有内容视图,如果您没有设置清晰的颜色,内容视图将显示在您的自定义背景下 在 iOS 7 中,默认的背景视图是白色的。在它是 clearColor 之前。【参考方案2】:

您必须使用 drawRect 创建子视图并将其放入您的 UITableViewCell

看这里Can't draw in UITableViewCell's drawRect

【讨论】:

以上是关于UITableViewCell 自定义CG绘制iOS 7的主要内容,如果未能解决你的问题,请参考以下文章

iOS入门了解CG

ios 使用 xib 文件创建自定义 UITableViewCell 的步骤

在 UITableViewCell 内自定义绘制 UIView

带有在代码中绘制的自定义图像的 UITableViewCell

自定义 UITableViewCell 和 setSelected:animated 上的动画:

自定义 UITableViewCell 的 iOS 单元测试