gpt4 book ai didi

ios - Swift 4 只为一个 View Controller 设置导航属性

转载 作者:行者123 更新时间:2023-11-28 07:56:51 25 4
gpt4 key购买 nike

我试图只使一个 View Controller 的导航栏半透明并更改其他一些属性。

但在用户离开此 VC 后,我希望它恢复到“正常”状态,即我在 AppDelegate 中拥有的状态。

我是否必须重置 viewWillDisappear 中的每一行?如果是这样,我将使用什么作为背景图像/阴影图像作为默认导航栏设置?

    // Make Nav Bar Translucent and Set title font/color
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.isTranslucent = true
self.navigationController?.view.backgroundColor = .clear
self.navigationController?.navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white, NSAttributedStringKey.font: UIFont.systemFont(ofSize: 20, weight: .semibold)]

最佳答案

是的,您必须在 ViewWillApear 中设置值并在 viewWillDisappear 函数中重置值,以获得清晰透明的导航栏和正常颜色的导航栏。

您可以在 UINavigationController 上使用扩展,它可以根据一些枚举值设置/重置值。在 UIImage 上创建扩展,它可以从颜色创建图像以用作导航栏和阴影图像上的背景图像。

enum NavigationBarMode {
case normal
case clear
}

extension UINavigationController {

func themeNavigationBar(mode: NavigationBarMode) {
self.navigationBar.isTranslucent = true
switch mode {
case .normal:
let image = UIImage.fromColor(.white)
navigationBar.setBackgroundImage(image, for: .default)
navigationBar.shadowImage = UIImage.fromColor(.lightGray)
navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.black, NSAttributedStringKey.font: UIFont.systemFont(ofSize: 20, weight: .semibold)]
case .clear:
let image = UIImage()
navigationBar.setBackgroundImage(image, for: .default)
navigationBar.shadowImage = image
navigationBar.titleTextAttributes = [NSAttributedStringKey.foregroundColor: UIColor.white, NSAttributedStringKey.font: UIFont.systemFont(ofSize: 20, weight: .semibold)]
}
}
}

extension UIImage {
static func fromColor(_ color: UIColor) -> UIImage {
let rect = CGRect(x: 0, y: 0, width: 1, height: 1)
UIGraphicsBeginImageContextWithOptions(rect.size, false, 0)
let context = UIGraphicsGetCurrentContext()
context!.setFillColor(color.cgColor)
context!.fill(rect)
let img = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return img!
}
}

现在你可以在 viewWillApear 中调用 themeNavigationBar(mode: .transparent) 并在 中调用 themeNavigationBar(mode: .normal) viewWillDisappear 重置。如果您有来自其他 viewController 的通用导航栏设置,您也可以调用 themeNavigationbar(mode: .normal)。

您可以使用一些第三方 cocoapods

https://github.com/MoZhouqi/KMNavigationBarTransition https://github.com/DanisFabric/RainbowNavigation

关于ios - Swift 4 只为一个 View Controller 设置导航属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47842405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com