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 使用 xib 文件创建自定义 UITableViewCell 的步骤
在 UITableViewCell 内自定义绘制 UIView
带有在代码中绘制的自定义图像的 UITableViewCell