I'm creating a UITableViewHeaderFooterView from a xib file, and almost everything is working properly.
The problem is that now when I try to change the background color (or if I had one configured in the xib), it will constantly output this message to the console:
Setting the background color on UITableViewHeaderFooterView has been deprecated. Please use contentView.backgroundColor instead.
This means I have two problems:
- If I don't want to see that warning, I must get rid of the background color in the xib file.(This is undesirable because then it means my xib no longer reflects what the view will look like at runtime).
- When I attempt to change the background color via code, I get the
contentView.backgroundColor
suggestion, but when I try to follow that suggestion, nothing happens. (This is becausecontentView
isnil
.)
Note: There is a similar question here, but that was mainly concerned with muting the message, not finding an alternative solution that resolves both problems above.
Update: To be clear, I want to continue using a xib file for the header view, and want to be able to call dequeueReusableHeaderFooterViewWithIdentifier: so that the table can be efficient in its management of the views.
How about using code to create a custom Header and place it?
This can happen if you design your header in a separate xib file and set the background of the main UIView in there.
To solve that, revert the UIView background color to the default color in InterfaceBuilder, and set the background color within the viewForHeaderInSection:section method.
As you see, we use
header.contentView.backgroundColor
and notheader.backgroundColor
(which is what the xib file was actually doing).This works for me:
Set the contentView.backgroundColor in the willAppear delegate callback:
or
To get rid of the warning you must not set the background color. The problem is when you creating TableHeader in such way, IB does not provide special object for that. Removing background color in source code will excelent solve described problem, just in some clicks.
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
Now you can change background like:
Here is the best way I've found to solve this:
UITableViewHeaderFooterView
to Default.UITableViewHeaderFooterView
, and call it Content View. (This is exactly what Apple does with aUITableViewCell
, and we are just mimicking that structure.)inside
theContent View
.contentView
property in an extension method, and addIBOutlet
to its definition. (See code below.)contentView.backgroundColor
in code, just as the error message tells you to..h file:
.m file:
This hierarchy is consistent with Apple's documentation: