Обновление (2013/7/8) - это было исправлено в более новых версиях iOS. Однако стоит знать, ориентируетесь ли вы на iOS 6 или ниже.
Вы можете обвинить Apple в этом, и это на самом деле довольно жестоко с их стороны. Технически , backgroundColor
не настраивается через прокси внешнего вида.
Из документации Apple:
Для поддержки настройки внешнего вида класс должен соответствовать протоколу UIAppearanceContainer, а соответствующие методы доступа должны быть помечены как UI_APPEARANCE_SELECTOR.
Если мы войдем в класс, подобный UIBarButtonItem
, и посмотрим на свойство tintColor
, то увидим следующее:
@property(nonatomic,retain) UIColor *tintColor UI_APPEARANCE_SELECTOR;
Так как он помечен тегом UI_APPEARANCE_SELECTOR
, мы знаем, что он работает с UIAppearance
.
Вот где Apple имеет особое значение: в UIView
, backgroundColor
не имеет тега выбора внешнего вида, но все еще работает с UIAppearance
. В соответствии со всей документацией, Apple не должна этого делать, но, тем не менее, это так!
Это создает ложное впечатление, что оно будет работать для всех подклассов UIView
, включая UITableView
. Это уже упоминалось, в этом предыдущем ответе SO
Итак, суть в том, что backgroundColor
вообще не должен работать с UIAppearance
, но по какой-то причине он работает на UIView
. Не гарантируется работа на UIView
подклассах, и она вообще не работает на UITableView
. Извините, я не могу дать вам более положительный ответ!