更改模式时如何更改导航阴影颜色?
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 或其他一些类。
【讨论】:
以上是关于更改模式时如何更改导航阴影颜色?的主要内容,如果未能解决你的问题,请参考以下文章