如何在iOS 13中使用UINavigationBarAppearance

如何在iOS 13中使用UINavigationBarAppearance,ios,objective-c,ios13,uinavigationbarappearance,Ios,Objective C,Ios13,Uinavigationbarappearance,如何使用此新对象自定义iOS 13中的导航栏?我在Objective-C中尝试了以下代码,但它不能正常工作。它仅在视图控制器被推送到或弹出到导航堆栈时显示我的标题文本属性 UINavigationBarAppearance *appearance = [UINavigationBarAppearance new]; appearance.titleTextAttributes = @{NSFontAttributeName: font}; 以下是此对象的文档。 仅仅创建一个UINavigati

如何使用此新对象自定义iOS 13中的导航栏?我在Objective-C中尝试了以下代码,但它不能正常工作。它仅在视图控制器被推送到或弹出到导航堆栈时显示我的标题文本属性

UINavigationBarAppearance *appearance = [UINavigationBarAppearance new];
appearance.titleTextAttributes = @{NSFontAttributeName: font};
以下是此对象的文档。
仅仅创建一个
UINavigationBarAppearance的实例是不够的。您必须在
UINavigationBar
实例(或其外观代理)上实际设置它

如果要在应用程序中的所有导航栏上进行相同的自定义,请将其应用于
UINavigationBar.appearance
代理

UINavigationBar.appearance.standardAppearance = appearance;

仅仅创建
UINavigationBarAppearance
的实例是不够的。您必须在
UINavigationBar
实例(或其外观代理)上实际设置它

如果要在应用程序中的所有导航栏上进行相同的自定义,请将其应用于
UINavigationBar.appearance
代理

UINavigationBar.appearance.standardAppearance = appearance;

在iOS13中,您需要在UINavigationBarAppearance对象上设置标题颜色,如下所示(Objective C版本):


在iOS13中,您需要在UINavigationBarAppearance对象上设置标题颜色,如下所示(Objective C版本):


对我来说,即使我正确地将外观设置为当前的UINavigationBar,它仍然不起作用


我发现,如果在已显示的UINavigationBar上设置更新的外观,则需要调用
navigationBar?.setNeedsLayout()

对于我来说,即使我正确地将外观设置为当前的UINavigationBar,它仍然不起作用


我发现如果在已经显示的UINavigationBar上设置更新的外观,则需要调用
navigationBar?.setNeedsLayout()

显示如何将此
appearance
变量应用于导航栏。这正是我所困惑的。文档说明了如何创建一个对象并设置属性。演示如何将此
外观
变量应用于导航栏。这正是我所困惑的。文档表明只需要创建一个对象并设置属性。好的,谢谢。如何在Objective-C中准确地执行UINavigationBar.appearance
?请参阅我的更新答案。为变量命名
外观
会让代码有点混乱。好吧,这似乎可行!唯一的问题是,它没有保持我的字体大小在动画期间推动和弹出视图。外观是否不再支持字体大小?可能不同导航栏的设置不同。请注意,如果您希望整个应用程序使用相同的设置,并且使用
UINavigationBar.appearance
代理,请确保在运行任何代码或创建任何UI之前在应用程序委托中设置该设置。外观代理仅适用于设置后创建的UI元素。谢谢,是的,这就是我正在做的,但它不起作用。至少谢谢你帮我走了这么远。好的,谢谢你。如何在Objective-C中准确地执行UINavigationBar.appearance?请参阅我的更新答案。为变量命名
外观
会让代码有点混乱。好吧,这似乎可行!唯一的问题是,它没有保持我的字体大小在动画期间推动和弹出视图。外观是否不再支持字体大小?可能不同导航栏的设置不同。请注意,如果您希望整个应用程序使用相同的设置,并且使用
UINavigationBar.appearance
代理,请确保在运行任何代码或创建任何UI之前在应用程序委托中设置该设置。外观代理仅适用于设置后创建的UI元素。谢谢,是的,这就是我正在做的,但它不起作用。至少谢谢你帮我走了这么远。
UINavigationBarAppearance *appearance = [[UINavigationBarAppearance alloc] init];
appearance.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor whiteColor]};
self.navigationController.navigationBar.standardAppearance = appearance;
self.navigationController.navigationBar.scrollEdgeAppearance = appearance;