分组UITableView中的透明背景 - iPhone

22

我想让分组的UITableView透明。我用以下代码部分地成功了:

UIColor *bgColor = [[UIColor alloc] initWithWhite:1 alpha:0.0];
historyTable.backgroundColor = bgColor;

很不幸,圆形单元格出现了黑色的角落。如何去掉它们?

Before After

4个回答

37

不要使用

UIColor *bgColor = [[UIColor alloc] initWithWhite:1 alpha:0.0];
historyTable.backgroundColor = bgColor;

只需使用:

historyTable.backgroundColor = [UIColor clearColor];

这也清理了你创建的内存泄漏问题。


1
非常感谢。顺便说一下,我稍后会释放bgColor,但还是谢谢你的关心 ;)。 - Jacek
不错..正是我今天所需要的 - Scrimmers
6
请注意:[UIColor clearColor] 目前必须在代码中设置,如果在 Interface Builder 中设置透明色是无效的。 - Sascha Konietzke
不知道呢,我从来没用过 IB。如果是这样的话,提交一个错误报告可能会有价值。 - Tom Irving
是的,尝试使用某个 alpha 值大于零的颜色。然而,话虽如此,我不确定如果出现黑色角落该怎么处理。 - Tom Irving
1
顺便提一下,[UIColor colorWithWhite:0 alpha:0] 也可以使用,因为这实际上就是 [UIColor clearColor] 的等价形式。由于某些疏忽,具有不同 RGB 值但 alpha 为 0 的颜色并不相等。 - user102008

35

如何移除 UITableView 的背景视图?

xxx.backgroundView = nil;

在 iPad 构建中是必需的。在编译以在 iPad 和 iPhone 上运行时,请检查 tableView 是否响应具有 ... 的选择器。

if ([self.tableView respondsToSelector:@selector(setBackgroundView:)]) {
    [self.tableView setBackgroundView:nil];
}

setBackgroundView: 可在 iOS 3.2 及更高版本中使用,且未限定于iPad,不是吗?为什么应该使用这个检查呢? - adruzh

8

在将两者设置为nil/clear之后,它最终对我起作用了:

[myTableView setBackgroundView:nil];
[myTableView setBackgroundColor:[UIColor clearColor]];

在将背景视图设置为nil后,无需将背景颜色设置为透明。 - Will
在我的情况下,我必须这样做,否则我会得到一个白色背景。但这可能是一个特殊情况。 - zero3nna

3

我遇到了这个问题,发现使用以下两种方法没有区别:

[[UIColor alloc] initWithWhite:1 alpha:0.0];

并且使用:

[UIColor clearColor];

我尝试了这两种方法,但是在我的表视图中仍然有小黑角。

我也尝试了建议的将backgroundView设置为nil,但这也没有起作用。

我通过在cellForRowAtIndexPath方法中将各个单元格的背景设置为透明来解决了这个问题:

cell.backgroundColor =  [UIColor clearColor];

当然,这样做的副作用是您的细胞本身也是透明的,这对于每个人来说都不是理想的,但在这种情况下对我来说还可以接受。


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