使用 UIAppearance 通用设置 UITableView BackgroundColor

Posted

技术标签:

【中文标题】使用 UIAppearance 通用设置 UITableView BackgroundColor【英文标题】:Set UITableView BackgroundColor Universally with UIAppearance 【发布时间】:2013-05-25 15:29:40 【问题描述】:

我正在尝试普遍更改我的表格视图的背景颜色。它是 UINavigationController 和 TabBarController 应用程序的组合。我尝试将以下内容放入 AppDelegate applicationDidFinishLaunchingWithOptions

[[[UITableView appearance] backgroundView] setBackgroundColor:[UIColor redColor]];
[[UITableView appearance] setBackgroundColor:[UIColor redColor]];
[[UITableView appearanceWhenContainedIn:[UINavigationController class], nil] setBackgroundColor:[UIColor greenColor]];
[[UITableView appearanceWhenContainedIn:[UITabBarController class], nil] setBackgroundColor:[UIColor greenColor]];

没有变化。

如果我尝试更改 AppDelegate 中的常规 UIView,则可以:

[[UIView appearance] setBackgroundColor:[UIColor redColor]];

如果我在 viewDidLoad 中单独攻击每个 tableview,这可行:

self.tableView.backgroundColor = [UIColor redColor];

我意识到这只是一行代码,但有很多视图,这只是另一件需要跟踪的事情。似乎 ios 5 UIAppearance 就是为此而生的。我不清楚为什么它不起作用。谢谢。

【问题讨论】:

【参考方案1】:

UIAppearance 在技术上不支持setBackgroundColor:,这就是为什么您没有看到所有表格视图颜色的变化。你最好的选择是继承UITableView

如果您需要有关如何执行此操作的信息,请参阅this answer.

对于未来的查看者,here 是指向答案的链接,其中包含UIAppearance 支持的所有方法的列表。

【讨论】:

感谢您的回复。 UITableView 不是 UIScrollView 的子类,它是 UIView 的子类吗?如果是这样,并且 UIView 符合 UIAppearance,那么 UIView 的任何子类都不会实现 UIAppearance 支持,包括 UITableView 吗?如果我失去了情节,请随时纠正我。 其实并不是UIAppearance不支持UITableView。它只是不支持它的backgroundColor 属性。 感谢您的澄清。该链接也很有帮助。 没问题。还有一个页面包含UIAppearance 支持的所有方法的列表。我会把它放在答案中。 目前这不是真的,setBackgroundColorUIAppearance 一起用于 UITableView。在 iOS 9.2 上测试。【参考方案2】: (BOOL)应用程序:(UIApplication *)应用程序 didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

[[UITableView 外观] setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"xxxx.png"]]];

返回是;

【讨论】:

【参考方案3】:

[UITableView backgroundColor] 选择器没有用 UI_APPEARANCE_SELECTOR 标记。根据苹果文档

"要支持外观定制,类必须符合 UIAppearanceContainer 协议,相关访问器方法必须用 UI_APPEARANCE_SELECTOR 标记。"

UITableView backgroundColor 不应该与外观代理一起使用

【讨论】:

以上是关于使用 UIAppearance 通用设置 UITableView BackgroundColor的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 UIAppearance 设置 ViewController 的 backgroundColor

我啥时候可以开始使用使用 UIAppearance 设置的属性?

使用 UIAppearance 设置 UITableViewCell 文本样式

使用 UIAppearance 设置视图控制器的直接视图背景颜色

防止 iOS 7 UINavigationBar 使用 UIAppearance 为 barTintColor 更改设置动画

如何从 UILabel 中删除 UIAppearance 设置?