UIAppearance 代理规则何时应用于新的视图控制器?

Posted

技术标签:

【中文标题】UIAppearance 代理规则何时应用于新的视图控制器?【英文标题】:When do UIAppearance proxy rules get applied to new view controller? 【发布时间】:2012-07-13 13:21:24 【问题描述】:

我在徘徊 UIAppearance 规则何时应用于某些新的视图控制器?

我制定了一些全局规则,并在我的应用程序委托中调用它们。这样所有的 UIButton 看起来都一样。但现在我只想修改一个 UIButton 的外观。我已经尝试将代码放在- (void)viewDidLoad 中删除它的背景,但它不起作用 - UIAppearance 规则尚未应用。在一个 ViewController 中,我将修改代码放在 - (void)viewWillLayoutSubviews 中,它运行良好,但现在在另一个 ViewController 中它不起作用(代码相同)。

在哪里可以安全地覆盖 UIAppearance 规则?

【问题讨论】:

【参考方案1】:

根据 2011 年 WWDC 视频介绍 UIAppearance,在视图上调用 -layoutSubviews 之前应用了自定义。

【讨论】:

【参考方案2】:

如果您希望自定义一个特定按钮,您应该:

    直接修改按钮实例的属性,不要修改类的外观设置,或者

    使用appearanceWhenContainedIn: 方法,如下所示:

    [[UIButton appearanceWhenContainedIn:[CustomView class], nil]
     setBackgroundImage:myButtonImage
                forState:UIControlStateNormal];
    

这样您仍然可以为您的特定按钮使用外观代理(当您知道它包含在特定视图中时),而不会更改一般外观设置。

【讨论】:

以上是关于UIAppearance 代理规则何时应用于新的视图控制器?的主要内容,如果未能解决你的问题,请参考以下文章

编译时间之间的 UIAppearance 代理缓存外观?

使用 UIAppearance 代理设置 UILabel 样式

限制 UIAppearance 代理范围

如何使 UIAppearance 代理适用于以编程方式创建的视图?

使用 UIAppearance 代理自定义字体时,MFMailComposeViewController 不起作用

将 tidymodels 拟合模型应用于新的未标记数据