【问题标题】:Bar Button tint color in iOS 13iOS 13 中的条形按钮色调颜色
【发布时间】:2020-01-16 07:44:53
【问题描述】:

在 iOS 13 中,他们改变了导航栏颜色的操作方式。现在他们使用 UINavigationBarAppearance 和 UIBarButtonItemAppearance 以及 standardAppearance 和 scrollEdgeAppearance 来自定义导航栏。

我正在寻找一种方法来为standardAppearance 和scrollEdgeAppearance 设置不同的导航栏色调。或者能够更改每个外观的条形按钮图标颜色。

        //set the standard nav bar appearance
        let navBarAppearance = UINavigationBarAppearance()
        navBarAppearance.configureWithOpaqueBackground()
        navBarAppearance.titleTextAttributes = [.foregroundColor: UIColor.white]
        navBarAppearance.largeTitleTextAttributes = [.foregroundColor: UIColor.white]
        navBarAppearance.backgroundColor = UIColor.mainAppColorForNavBar

        //set bar button appearance
        let buttonAppearance = UIBarButtonItemAppearance()
        buttonAppearance.normal.titleTextAttributes = [.foregroundColor : UIColor.white]
        navBarAppearance.buttonAppearance = buttonAppearance

        UINavigationBar.appearance(whenContainedInInstancesOf: [UINavigationController.self]).standardAppearance = navBarAppearance



        //set the scroll edge nav bar appearance
        let scrollNavBarAppearance = UINavigationBarAppearance()
        scrollNavBarAppearance.configureWithOpaqueBackground()
        scrollNavBarAppearance.titleTextAttributes = [.foregroundColor: UIColor.label]
        scrollNavBarAppearance.largeTitleTextAttributes = [.foregroundColor: UIColor.label]

        //set bar button appearance
        let scrollButtonAppearance = UIBarButtonItemAppearance()
        scrollButtonAppearance.normal.titleTextAttributes = [.foregroundColor : UIColor.label]
        scrollNavBarAppearance.buttonAppearance = scrollButtonAppearance

        UINavigationBar.appearance(whenContainedInInstancesOf: [UINavigationController.self]).scrollEdgeAppearance = scrollNavBarAppearance

这将设置导航栏的色调,但不区分标准外观和滚动边缘外观。

UINavigationBar.appearance().tintColor = UIColor.white

目前在 scrollEdgeAppearance 中(看起来是我想要的方式,无需更改)

目前在standardAppearance(按钮丢失,因为它与背景颜色相同,我想在standardAppearance中将图标颜色更改为白色)

感谢任何帮助。

谢谢,

【问题讨论】:

  • 你找到解决办法了吗?
  • @Mohammadalijf 抱歉耽搁了,还没有找到解决方案。
  • @user1184205 有什么解决办法吗?
  • @JERC 对不起,我没有找到。我最终改变了按钮的颜色,这样它在两种状态下都会突出。

标签: ios swift uinavigationcontroller ios13


【解决方案1】:

我遇到了后退按钮的类似问题,并通过为每种外观设置具有不同渲染模式的图像来解决它。这样可以避免应用 tintColor。

// demo image
let image = UIImage(systemName: "ellipsis.circle")!

// image with .alwaysOriginal rendering mode to avoid tintColor application
let imageForNavBarAppearance = image
    .withTintColor(.black)
    .withRenderingMode(.alwaysOriginal)
let imageForScrollNavBarAppearance = image
    .withTintColor(.green)
    .withRenderingMode(.alwaysOriginal)

// your UINavigationBarAppearance instances
navBarAppearance.setBackIndicatorImage(imageForNavBarAppearance, transitionMaskImage: imageForNavBarAppearance)
scrollNavBarAppearance.setBackIndicatorImage(imageForScrollNavBarAppearance, transitionMaskImage: imageForScrollNavBarAppearance)

这仅解决了后退按钮的问题。

还有其他两个选项可以为栏项外观设置背景图像。

UINavigationBarAppearance.buttonAppearance 带有背景图像的外观配置将应用于所有条形项目。 这应该没问题,因为您只有一个栏项。

UINavigationBarAppearance.doneButtonAppearance 如果您要为右上角的“+”符号创建一个完成样式的栏项目,则应该应用此外观配置。

let ap = UIBarButtonItemAppearance()
ap.normal.backgroundImage = image.withTintColor(.black).withRenderingMode(.alwaysOriginal)

let scrollAp = UIBarButtonItemAppearance()
scrollAp.normal.backgroundImage = image.withTintColor(.green).withRenderingMode(.alwaysOriginal)

// apply to all bar items
navBarAppearance.buttonAppearance = ap
scrollNavBarAppearance.buttonAppearance = scrollAp

// or apply to done buttons
navBarAppearance.doneButtonAppearance = ap
scrollNavBarAppearance.doneButtonAppearance = scrollAp

【讨论】:

    猜你喜欢
    • 2020-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    相关资源
    最近更新 更多