更改模式时如何更改导航阴影颜色?

Posted

技术标签:

【中文标题】更改模式时如何更改导航阴影颜色?【英文标题】: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")
        
    

【问题讨论】:

【参考方案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 或其他一些类。

【讨论】:

以上是关于更改模式时如何更改导航阴影颜色?的主要内容,如果未能解决你的问题,请参考以下文章

如何更改滑块悬停和活动“阴影”的颜色

在flutter中进入暗模式时更改系统导航和状态栏的颜色

如何更改 Eclipse 中导航器视图的背景颜色?

Android更改材质高程阴影颜色

更改 UIBarButtonItem 的 UIToolbar 阴影颜色

iOS 7隐藏导航栏时如何更改状态栏的颜色?