如何将UIAppearance代理属性应用于UILabel?

Jos*_*non 30 uilabel ios uiappearance

在尝试将UIAppearance代理样式应用于UILabel类代理时,我得到了不可靠的结果.例如,以下工作正如我所期望的那样:

[[UILabel appearance] setFont:[UIFont fontWithName:SOME_FONT size:SOME_SIZE]];
[[UILabel appearance] setShadowColor:[UIColor blackColor]];
Run Code Online (Sandbox Code Playgroud)

但是,设置textColor不起作用:

[[UILabel appearance] setColor:[UIColor greenColor]];
Run Code Online (Sandbox Code Playgroud)

确实有效.有点.它有点不可靠,导致任何特定于实例的调用setTextColor:被忽略.

将UIAppearance样式应用于UILabel的正确方法是什么?

Jos*_*non 54

好的,事实证明你不能使用UIAppearance代理来设置任何UILabel属性的样式.

虽然UILabel该类符合UIAppearanceContainer协议,但对UILabel.h的检查表明它的所有属性都没有标记UI_APPEARANCE_SELECTOR,这是使用的先决条件UIAppearance.

开溜.

  • 这很糟糕!可怕! (3认同)
  • 这对我来说仍然令人难以置信.UIButton也完全没有UIAppearance的风格.我在2012年3月提交了雷达.人们只能希望他们在iOS 7中解决这个问题. (2认同)
  • 我不相信这仍然是真的.至少,我能够在我的应用程序中使用UIAppearance代理来设置UILabels的样式.我遇到的问题是我不想要我的标签样式的区域.比如在UISegmentedControl中.我尝试使用appearanceWhenContainedIn:来解决这个问题,但这很复杂,我最终取出外观代理并手动设置样式. (2认同)