简体   繁体   中英

Can't set background color of UITableViewCell in IB

I have created a bunch of cells which I reuse in a table view. All of those cells just have different UILabel s inside them and some UIImageView s (nothing covers the complete cell).

Setting the background color in IB has no effect (always white or transparent, can't say which one of them). But if I press Command-R (simulate interface) the cell has the correct background color in the simulator.

I tried to set it in tableView:cellForRowAtIndexPath: but it doesn't work like I would think either.

This does the trick:

cell.contentView.backgroundColor = [UIColor redColor];

but these have no effect (even if I set the cell.contentView.backgroundColor to clearColor ):

cell.backgroundView.backgroundColor = [UIColor redColor];

cell.backgroundColor = [UIColor redColor];

I set all the layout/font/background stuff in IB. Any idea why this isn't working in this case?

Why do I need to modify the contentView 's backgroundColor and not the backgroundView 's?

It seems to be a common issue. Could somebody please point me in the right direction to (finally) understand how background colors are handled within a table view cell.

To change the background color of the cell, you have to do it in the willDisplayCell:forRowAtIndexPath: method. This is mentioned in the UITableViewCell documentation near the bottom of the Overview. So you need:

- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
    cell.backgroundColor = [UIColor redColor];  
}

The contentView is just the recommended subview to put custom controls in so that the cell gets layed out properly when table editing is going on.

There's an easier solution: When you create a UITableViewCell in Interface Builder, simply drag and drop an additional UIView so that it covers the entire UITableViewCell you're creating within IB. Place your additional UI elements on top of this additional UIView . You can set this extra UIView to whatever background you like.

There are quite a few answers on StackOverflow that suggest you change the background color of your UITableViewCell by using a line of code like this one:

cell.contentView.backgroundColor = [UIColor redColor];

If you add a drop shadow to your cell by adjusting the contentView 's frame size slightly, you may find that this line will change both the background color of your cell and the color of your drop shadow area as well.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM