Reputation: 3155
When I set the backgroundColor
for my UITableView
it works fine on iPhone (device and simulator) but NOT on the iPad simulator. Instead I get a light gray background for any color I set including groupTableViewBackgroundColor
.
Steps to reproduce:
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor blackColor];
}
Thanks for your help!
Upvotes: 129
Views: 44190
Reputation: 41
I also got this kind of problem. The UITableView
background color will be always groupTableViewBackgroundColor
no matter what I set.
The symptom is like this issue - UITableView is resetting its background color before view appears
After I set the background color in init
function, it is correct. In viewDidLoad
and viewWillAppear
stage, it is correct. However, in viewDidAppear
, the background color is reset to its default color.
The accepted answer does not work now.
[myTableView setBackgroundView:nil];
[myTableView setBackgroundView:[[UIView alloc] init]];
Here is my solution. Just set the tableView's background color in viewDidLoad
function rather than init
or viewWillAppear
.
- (void)viewDidLoad {
[super viewDidLoad];
self.tableView.backgroundColor = [UIColor clearColor];
}
Upvotes: 0
Reputation: 9933
None of the above worked for my UIViewController->UITableView specified using a single XIB. What did work was moving the whole setup into a Storyboard, and setting the background color using the IB inspector.
Upvotes: 0
Reputation: 429
I think it is worth noting that as of Xcode 6.1 and iOS 8.1, specifically for iPad (if you want to set cell background as well) it seems that you must set table background AND cell background.
For instance, on an iPhone storyboard you can set a cell to clear color, then set background image of table programmatically for a transparent table with background image. However if you were to view this same configuration on iPad the cells would not be clear. Cells will need to be set to clear programmatically for iPad.
Upvotes: 2
Reputation: 121
tried setting backgroundColor and View for the table, had no luck (Xcode 5 iOS7.1 iPad simulator), looked OK for iPhone, but light grey background color on iPad...
working with backgroundColor for the cell itself fixed this for me on iOS 7.1 4/2014
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"ViewSomeTriggerCell";
// get a cell or a recycled cell
sictVCViewSomeTriggerCell *cellTrigger = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
// put a picture and a word in the cell (positions set in .xib)
NSString * tname = [self.fetchedTriggersArray objectAtIndex:indexPath.row];
cellTrigger.imageTrigger.image = [UIImage imageNamed:@"icon_appicon.png"];
cellTrigger.labelName.text = tname;
// set background color, defeats iPad wierdness
// http://stackoverflow.com/questions/2688007/uitableview-backgroundcolor-always-gray-on-ipad
// clearColor is what I wanted, and it worked, also tested with purpleColor
cellTrigger.backgroundColor =[UIColor clearColor];
return cellTrigger;
}
Upvotes: 1
Reputation: 1166
If you are adding a UIViewController to another UIViewController you also need to set your view's background to clearColor in addition to UITableView or else you will get a white background instead of light grey.
if ([myViewController.myTableView respondsToSelector:@selector(setBackgroundView:)]) {
[myViewController.myTableView setBackgroundView:nil];
}
myViewController.myTableView.backgroundColor = [UIColor clearColor];
myViewController.view.backgroundColor = [UIColor clearColor];
Upvotes: 0
Reputation: 3081
If your application targets both iPhone and iPad you can do it like this:
[myTableView setBackgroundColor:[UIColor clearColor]]; // this is for iPhone
if ([[UIDevice currentDevice] userInterfaceIdiom] != UIUserInterfaceIdiomPhone) {
[myTableView setBackgroundView:nil];
[myTableView setBackgroundView:[[UIView alloc] init]];
} // this is for iPad only
Notice that the TableView alloc doesn't have autorelease for ARC.
Upvotes: 0
Reputation: 101
On iPad the backgroundView
property seems to be used to create the gray background color for grouped tables. So for changing the background color for grouped tables on iPad one should nil
out the backgroundView
property and then set the backgroundColor
on the desired table view.
- (void)viewDidLoad
{
[super viewDidLoad];
// If you need to support iOS < 3.2, check for the availability of the
// backgroundView property.
if ([self.tableView respondsToSelector:@selector(setBackgroundView:)]) {
self.tableView.backgroundView = nil;
}
self.tableView.backgroundColor = [UIColor whiteColor];
}
Upvotes: 6
Reputation: 53689
Try one of these.
[myTableView setBackgroundView:nil];
[myTableView setBackgroundView:[[[UIView alloc] init] autorelease]];
Upvotes: 245
Reputation: 301
Thanks a lot for this solution. I applied this on a UITableView property with IBOutlet in a UIViewController and it works well like:
[panelTable setBackgroundView:nil];
[panelTable setBackgroundView:[[[UIView alloc] init] autorelease]];
[panelTable setBackgroundColor:UIColor.clearColor]; // Make the table view transparent
Upvotes: 30