分组 UITableViewCell 中的自定义背景绘制

发布于 2024-12-04 15:57:33 字数 600 浏览 0 评论 0 原文

当样式设置为“分组”并且单元格是该部分的第一个或最后一个时,我在 UITableViewCell 中绘制自定义渐变背景时遇到一些问题。我的方法是简单地创建一个 CAGradientLayer 并将其添加到视图中,如下所示:

CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = rect;
gradient.colors = [NSArray arrayWithObjects:(id)[_backgroundColorLight CGColor], (id)[_backgroundColorDark CGColor], nil];
[self.backgroundView.layer insertSublayer:gradient atIndex:0];
self.backgroundView.layer.masksToBounds = YES;

不幸的是,这会生成如下所示的单元格:

有谁知道如何使背景适合单元格的边框吗?

谢谢
–f

I'm having some trouble drawing a custom gradient background in a UITableViewCell when the style is set to 'grouped' and the cell is first or the last one of the section. My approach is to simply create a CAGradientLayer and add it to the view like this:

CAGradientLayer *gradient = [CAGradientLayer layer];
gradient.frame = rect;
gradient.colors = [NSArray arrayWithObjects:(id)[_backgroundColorLight CGColor], (id)[_backgroundColorDark CGColor], nil];
[self.backgroundView.layer insertSublayer:gradient atIndex:0];
self.backgroundView.layer.masksToBounds = YES;

Unfortunately this produces cells like this one:Background exceeding the edges

Does anyone have a hint on how to make the background fit the boarders of the cell?

Thanks
–f

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

城歌 2024-12-11 15:57:33

如果您绘制自定义背景,则还必须自己绘制边框。那里有很多开源的东西。

基本上,您需要知道[在单元格中]它是顶部/中间/底部/单个,然后将其剪切到drawRect中。使用 insertSublayer 你不会走得太远。

查看此处找到的 PageCellBackground 类:
http://cocoawithlove.com/2010/12/uitableview-construction-drawing -and.html

If you draw a custom background, you also have to draw the borders yourself. There's quite some open source stuff out there.

Basically, you need to know [in the cell] if it's top/middle/bottom/single, and cut the stuff in drawRect. You won't come far with insertSublayer.

Check out the PageCellBackground class you find here:
http://cocoawithlove.com/2010/12/uitableview-construction-drawing-and.html

热情消退 2024-12-11 15:57:33

我还没有尝试过,但 CAGradientLayer 恰好是 CALayer 的子类,所以也许设置它的 borderRadius 可能会起作用。但它会绕过所有角落,因此您可以通过使图层比单元更大并让单元视图将其切掉来补偿这一点。

看看 使用 CALayers 的圆角 UIView - 只有一些角 - 如何? 更多示例

I've not tried it but CAGradientLayer happens to be a subclass of CALayer, so perhaps setting its borderRadius may work. But it rounds all corners then, so you may compensate for that by making the layer bigger than the cell and have the cell view cut it off.

Look at Rounded UIView using CALayers - only some corners - How? for more examples

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文