iPad上iOS7系统中UITableViewCell的透明背景问题

33
昨晚我决定升级到Xcode 5并查看我的当前项目。更新故事板到新的UI后,一切都很好,也可以正常运行。由于我有一个全能二进制文件,所以我决定在iPad上测试一下,发现在先前透明/清晰颜色的UITableview中引入了新的白色背景。这似乎是在单元格级别而不是表格级别上发生的。当我在6.1模拟器上运行时,iPad和iPhone上的一切看起来都很好。而且在iOS7上iPhone上的一切看起来也很好。
我为界面构建器设置的所有内容都与iPhone和iPad相同。从我所知道的情况来看,这似乎与这个新的“内容视图”有关(它是Item Cell的一个子组),它不能使用透明值/设置。
有什么想法/建议吗?
4个回答

103

在与接口构建器浪费多个小时后,我认为那里可能有一个bug。因此,我开始寻找编程答案。显然,如果我从这里开始,我可以节省大量时间。通过将以下内容添加到方法中:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

我通过添加这一行代码,成功解决了iPad上的透明度问题:

cell.backgroundColor = [UIColor clearColor];  // Adding this fixes the issue for iPad
希望这能帮助其他使用iPad和iOS7的人解决白色背景显示的问题!

2
这对我来说也是唯一的解决方案。谢谢!(我试图在XIB中将所有单元格和内容视图背景设置为透明,但由于某种原因,这仅在第一次加载时有效(reloadTable会在没有编程解决方案的情况下设置白色背景)) - Rob
1
这绝对是 Xcode 5 的一个 bug。我必须在方法(cellForRowAtIndexPath)的最后一条指令中编写 cell.backgroundColor = [UIColor clearColor];,因为如果您在该指令之前更改其他内容,则单元格不起作用。 - Beto
我遇到了完全相同的问题,而这个解决方案也为我解决了问题,谢谢。 - Magua
这个问题仍然存在,已经快一年了!我正在提交一个错误报告,但在iOS 8的Beta 6中仍然发生着同样的问题... - George
1
这仍然是Xcode 6.0.1下的一个问题。这个解决方案完美地解决了它 :) - Sobakus
显示剩余5条评论

4
如果您正在使用自定义的UITableViewCell,并从storyboard/xib调用它,您可以使用以下代码。
@implementation YourCustomTableViewCell

- (void) awakeFromNib
{
    self.backgroundColor = [UIColor clearColor];
}

3

如果还有人在iPad上使用表格视图/单元格透明度方面遇到问题,这可能会有所帮助(来自https://stackoverflow.com/a/31396483/2301213,由于时代变了,它是用Swift编写的)

似乎在将UITableView添加到窗口的过程中(在willMoveToWindow和didMoveToWindow之间),某些iPad会将tableView的背景颜色重置为白色。 它不使用backgroundColor属性秘密地执行此操作。

现在我在需要有颜色/透明度的表格时将其用作基类,而不是使用UITableView。

class ColorableTableView : UITableView {
    var _backgroundColor:UIColor?
    override var backgroundColor:UIColor? {
        didSet {
            _backgroundColor = backgroundColor
        }
    }
    override func didMoveToWindow() {
        backgroundColor = _backgroundColor
        super.didMoveToWindow()
    }
}

在我的iPad上,单元格的背景颜色也以同样的方式设置为白色(即在移动到窗口期间位于表中的单元格),因此同样适用于它们,否则可能会不时出现奇怪的不透明单元格弹出,因为它被重用...

class ColorableTableViewCell : UITableViewCell {
    var _backgroundColor:UIColor?
    override var backgroundColor:UIColor? {
        didSet {
            _backgroundColor = backgroundColor
        }
    }
    override func didMoveToWindow() {
        backgroundColor = _backgroundColor
        super.didMoveToWindow()
    }
}

0
如果您正在使用静态单元格表格,则可以执行以下操作:
override func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {

     cell.backgroundColor = UIColor.clearColor()
}

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