忽略随机子视图的 UIAppearance 代理而不是整个 class

Overlook UIAppearance proxy for random subviews & not whole class

我在 appDelegate 中使用 UIAppearance 协议在整个应用程序中设置 UILabel 的文本对齐方式。

[[UILabel appearance] setTextAlignment:NSTextAlignmentNatural];

首选自然文本对齐方式来覆盖 RTL 和 LTR 语言支持。但在某些情况下,我需要将 UILabel 保持为居中对齐或仅右对齐。 class 可能有混合方法,例如支持某些自然对齐方式和某些特定对齐方式,因此以下代码不适用。

[[UILabel appearanceWhenContainedIn:[MyClass class], nil]];

我已尝试显式设置特定 UILabel 实例的文本对齐方式,但未应用。有人遇到过这样的场景吗?

如果您使用的是 Interface Builder(IB)/Storybaord,您可以为所需格式创建 UILabel 的自定义子class,在 IB 中分配自定义 class,然后应用 UIAppearance 代理对于那些自定义子 classes.

 [[CenterLabel appearance] setTextAlignment:NSTextAlignmentCenter];
 [[NaturalLabel appearance] setTextAlignment:NSTextAlignmentNatural];

这将允许您在同一 class 中混合和匹配不同的标签类型,而无需使用 appearanceWhenContainedIn 限制。

我为任何控制器和 table 视图单元明确更改了 "viewWillAppear" 中 UILabel 的预期文本对齐方式,我在 "awakeFromNib" 应用了相同的更改并且工作正常。我试图用 "layoutSubview" 方法来做,但没有用。

我相信如果您以编程方式创建任何 UILabel,那么您可以设置特定的 textAlignment,这将覆盖 UIAppearance 代理工作。我没有测试这部分。

我希望这会有所帮助并节省一些人的时间。