【问题标题】:How to change Navigation shadow color when changed mode?更改模式时如何更改导航阴影颜色?
【发布时间】:2021-12-30 06:16:44
【问题描述】:
navigationController?.navigationBar.layer.shadowColor = ColorPalette.navigationBarShadowColor.cgColor

根据特征模式设置颜色。

class ColorPalette : NSObject {

    static var navigationBarShadowColor: UIColor {       
        return UIColor { (traits) -> UIColor in
            //dark: Black // light: grey16
            return traits.userInterfaceStyle == .dark ?
            UIColor.black : UIColor(hex: "dbdbdc")
        }
    }
}

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    您可以创建一个 swift 文件,在该文件中添加以下代码。

    public enum Mode {
        
        public enum Colors {
            public static var backgroundColor: UIColor = {
                if #available(iOS 13, *) {
                    return UIColor { (UITraitCollection: UITraitCollection) -> UIColor in
                        switch UITraitCollection.userInterfaceStyle {
                            case .light, .unspecified:
                                // light mode detected
                                return .blue
                            case .dark:
                                // dark mode detected'
                                return .yellow
                            @unknown default:
                                return .red
                        }
                    }
                } else {
                    /// Return a fallback color for iOS 12 and lower.
                    return .red
                }
            }()
        }
    }
    

    之后,在您的 viewController 中的 viewWillAppear 方法中添加以下代码

    yourView.backgroundColor = Mode.Colors.backgroundColor
    

    【讨论】:

      【解决方案2】:

      在 AppDelegate 中添加这个

      UINavigationBar.appearance().shadowColor = UITraitCollection.current.userInterfaceStyle == .light ? UIColor(named: "light_color") : UIColor(named: "dark_color")
      

      【讨论】:

      • 我们已经在使用此代码,但下次我们将亮模式更改为暗模式或将暗模式更改为模式时,它无法正常工作。
      • 在资产中为任何和深色添加两种颜色,只需指定该颜色名称,它将检测模式的变化并根据所选模式自动反映您的深色或浅色
      【解决方案3】:

      移除导航栏阴影

      self.navigationController?.navigationBar.shadowImage = UIImage()
      

      如果 iOS 13

      self.navigationController?.navigationBar.standardAppearance.shadowColor = UIColor.black 
      

      【讨论】:

      • 其实我们已经加了阴影但是下次我们改变模式就不会反映了。
      【解决方案4】:
      override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
            super.traitCollectionDidChange(previousTraitCollection)
            self.navigationController?.navigationBar.standardAppearance.shadowColor = UIColor.black.cgColor 
        }
      

      我们正在使用它并且它正在工作,但我们只需要一个类,我们必须添加这种类型的代码,例如 AppDelegate 或其他一些类。

      【讨论】:

        猜你喜欢
        • 2018-12-02
        • 2019-06-30
        • 1970-01-01
        • 2019-11-02
        • 1970-01-01
        • 1970-01-01
        • 2020-09-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多