【问题标题】:How to use UINavigationBarAppearance in iOS 13如何在 iOS 13 中使用 UINavigationBarAppearance
【发布时间】:2020-01-25 20:48:11
【问题描述】:

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

UINavigationBarAppearance *appearance = [UINavigationBarAppearance new];
appearance.titleTextAttributes = @{NSFontAttributeName: font};

这里是这个对象的文档。 https://developer.apple.com/documentation/uikit/uinavigationbarappearance?language=objc

【问题讨论】:

  • 展示如何将此appearance 变量应用到导航栏。
  • 这就是我感到困惑的地方。文档表明只是制作一个对象并设置属性。

标签: ios objective-c ios13 uinavigationbarappearance


【解决方案1】:

仅仅创建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;

【讨论】:

  • 好的,谢谢。我在 Objective-C 中究竟如何做UINavigationBar.appearance
  • 查看我的更新答案。将变量命名为 appearance 会使代码有点混乱。
  • 好吧,这似乎行得通!唯一的问题是它没有在动画期间保持我的字体大小以推动和弹出视图。外观不再支持字体大小了吗?
  • 也许你对不同的导航栏有不同的设置。请注意,如果您希望整个应用程序使用相同的设置并使用 UINavigationBar.appearance 代理,请确保在运行任何代码或创建任何 UI 之前在应用程序委托中进行设置。外观代理仅适用于设置后创建的 UI 元素。
  • 谢谢,是的,这就是我正在做的,但它不起作用。感谢您帮助我至少做到了这一点。
【解决方案2】:

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

UINavigationBarAppearance *appearance = [[UINavigationBarAppearance alloc] init];
appearance.titleTextAttributes = @{NSForegroundColorAttributeName: [UIColor whiteColor]};
self.navigationController.navigationBar.standardAppearance = appearance;
self.navigationController.navigationBar.scrollEdgeAppearance = appearance;

【讨论】:

    【解决方案3】:

    对我来说,即使我正确地将外观设置为当前 UINavigationBar,它仍然无法正常工作。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-16
      • 1970-01-01
      • 1970-01-01
      • 2020-11-09
      • 1970-01-01
      • 2020-01-19
      • 1970-01-01
      相关资源
      最近更新 更多