如何在 iOS 13 中使用 UINavigationBarAppearance
How to use UINavigationBarAppearance in iOS 13
如何使用这个新的 object 自定义 iOS 13 中的导航栏?我在 Objective-C 中尝试了以下代码,但它无法正常工作。当视图控制器被推送或弹出到导航堆栈时,它只显示我的标题文本属性。
UINavigationBarAppearance *appearance = [UINavigationBarAppearance new];
appearance.titleTextAttributes = @{NSFontAttributeName: font};
这是此 object 的文档。
https://developer.apple.com/documentation/uikit/uinavigationbarappearance?language=objc
仅创建 UINavigationBarAppearance
的实例是不够的。您必须实际将其设置在 UINavigationBar
实例(或其外观代理)上。
// Setup the nav bar appearance
UINavigationBarAppearance *appearance = [UINavigationBarAppearance new];
appearance.titleTextAttributes = @{NSFontAttributeName: font};
// Apply it to a specific nav bar
someNavBarInstance.standardAppearance = appearance;
// There are also the compactAppearance and scrollEdgeAppearance properties that can be set as needed.
如果您希望在应用程序的所有导航栏上进行相同的自定义,请将其应用于 UINavigationBar.appearance
代理。
UINavigationBar.appearance.standardAppearance = appearance;
在 iOS13 中,您需要像此处一样在 UINavigationBarAppearance object 上设置标题颜色(Objective C 版本):
UINavigationBarAppearance *appearance = [[UINavigationBarAppearance alloc] init];
appearance.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor whiteColor]};
self.navigationController.navigationBar.standardAppearance = appearance;
self.navigationController.navigationBar.scrollEdgeAppearance = appearance;
对我来说,即使我正确地将外观设置为当前的 UINavigationBar,它仍然无法正常工作。
我发现如果您在已显示的 UINavigationBar 上设置更新外观,则需要调用 navigationBar?.setNeedsLayout()
。
如何使用这个新的 object 自定义 iOS 13 中的导航栏?我在 Objective-C 中尝试了以下代码,但它无法正常工作。当视图控制器被推送或弹出到导航堆栈时,它只显示我的标题文本属性。
UINavigationBarAppearance *appearance = [UINavigationBarAppearance new];
appearance.titleTextAttributes = @{NSFontAttributeName: font};
这是此 object 的文档。 https://developer.apple.com/documentation/uikit/uinavigationbarappearance?language=objc
仅创建 UINavigationBarAppearance
的实例是不够的。您必须实际将其设置在 UINavigationBar
实例(或其外观代理)上。
// Setup the nav bar appearance
UINavigationBarAppearance *appearance = [UINavigationBarAppearance new];
appearance.titleTextAttributes = @{NSFontAttributeName: font};
// Apply it to a specific nav bar
someNavBarInstance.standardAppearance = appearance;
// There are also the compactAppearance and scrollEdgeAppearance properties that can be set as needed.
如果您希望在应用程序的所有导航栏上进行相同的自定义,请将其应用于 UINavigationBar.appearance
代理。
UINavigationBar.appearance.standardAppearance = appearance;
在 iOS13 中,您需要像此处一样在 UINavigationBarAppearance object 上设置标题颜色(Objective C 版本):
UINavigationBarAppearance *appearance = [[UINavigationBarAppearance alloc] init];
appearance.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor whiteColor]};
self.navigationController.navigationBar.standardAppearance = appearance;
self.navigationController.navigationBar.scrollEdgeAppearance = appearance;
对我来说,即使我正确地将外观设置为当前的 UINavigationBar,它仍然无法正常工作。
我发现如果您在已显示的 UINavigationBar 上设置更新外观,则需要调用 navigationBar?.setNeedsLayout()
。