UITableView backgroundColor always white on iPad

2019-01-16 13:54发布

I'm working on a project. I have plenty of UITableViews which are set as clear color. Their views' background color are set to my custom color and everything is fine on iPhone.

The issue comes up on iPad! I tried almost everything, but my UITableView has a white color.

I checked the other topics, like: UITableView backgroundColor always gray on iPad, but nothing worked. Also, my problem is not grey, it's white as snow!

What might be the reason of it?

16条回答
我欲成王,谁敢阻挡
2楼-- · 2019-01-16 14:14

SWIFT I had this problem too. Works fine on .phone but tableViewCells go white on .pad. Thought I'd show how I fixed it using swift.

Connect The tableViewCell to the viewController.swift as an @IBOutlet like so:

    @IBOutlet weak var tvc1: UITableViewCell!
    @IBOutlet weak var tvc2: UITableViewCell!
    @IBOutlet weak var tvc3: UITableViewCell!

Then in viewDidLoad put the following:

tvc1.backgroundColor = tvc1.backgroundColor
tvc2.backgroundColor = tvc2.backgroundColor
tvc3.backgroundColor = tvc3.backgroundColor

Very strange, I don't know whats happening here but this solved it for me.

查看更多
啃猪蹄的小仙女
3楼-- · 2019-01-16 14:16

Good News: According to the release notes, for iOS 10:

When running on iPad, the background color set for a UITableViewCell in a Storyboard is now respected.

For versions <10:

I was seeing this in iOS 8 (8.3). Even though in IB my cells were "clear color" and their content views were "clear color" they would render as white. An imperfect but reasonable solution, since it still takes values from IB:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    ...
    cell.backgroundColor = cell.contentView.backgroundColor;
    return cell;
}

It seems that my dequeued reuseable cells get their background forced to white on iPad. I was able to determine this using the view hierarchy debugger.

Once I did this I was able to use the table's background color and didn't have to set a background view, although that works as well.

查看更多
太酷不给撩
4楼-- · 2019-01-16 14:17

I just had this issue and fixed it by changing the backgroundColor of the View (as opposed to the one of the tableView). Seems on iPad, that's the one that is used first and in my case it was set to white.

查看更多
看我几分像从前
5楼-- · 2019-01-16 14:19

I have a table view with many different cells inside, each one has different color.

The answer from @Ben Flynn cell.backgroundColor = self.contentView.backgroundColor can not achieve that. The reason is self.contentView.backgroundColor is nil, so what you did is just clear the cell.backgroundColor = nil.

Basically it is the bug from Xcode (I think, yeah it sucks!), cell.backgroundColor still has color, but it can not display.

After debug for a while, based on @Ray W answer, here is my solution.

@impelement YouCustomCellClass

- (void)awakeFromNib {
    [super awakeFromNib];
    self.backgroundColor = self.backgroundColor; // What the heck?? But it is.
}

@end
查看更多
登录 后发表回答