gpt4 book ai didi

swift - 是否可以通过协议(protocol)自定义UINavigationBar?

转载 作者:行者123 更新时间:2023-11-30 10:31:37 25 4
gpt4 key购买 nike

我想为某些 View Controller 自定义 UINavigationBar。由于某些原因,我不能只是简单地扩展 UIViewController。所以我试图通过协议(protocol)来做到这一点。

我尝试过的:

protocol TransparentNavigationBarProtocol {
func makeNavigationBarTransparent()
}

extension TransparentNavigationBarProtocol where Self: UIViewController {

func makeNavigationBarTransparent() {
if let navController = navigationController {
navController.navigationBar.setBackgroundImage(UIImage(), for: .default)
navController.navigationBar.shadowImage = UIImage()
navController.navigationBar.tintColor = UIColor.white
navController.navigationBar.barStyle = .blackTranslucent
navController.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor.white]
navController.navigationBar.backgroundColor = .clear
}
}

}

我添加了一些断点,显示函数已成功调用,但导航栏没有改变。所以我想知道是否可以通过协议(protocol)来实现这一点?

最佳答案

对于Xcode11,你需要设置一个图像,而不是nil

此外,在 View Controller 的 viewWillAppear 中,您需要调用 makeNavigationBarTransparent()

func makeNavigationBarTransparent() {
if let navController = navigationController {
navController.navigationBar.setBackgroundImage(UIImage(), for: .default)
navController.navigationBar.shadowImage = UIImage()
navController.navigationBar.tintColor = UIColor.init(red: 74/255, green: 74/255, blue: 74/255, alpha: 1)
navController.navigationBar.barStyle = .default
navController.navigationBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: UIColor(red: 74/255, green: 74/255, blue: 74/255, alpha: 1)]
}
}

override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
makeNavigationBarTransparent()
}

关于swift - 是否可以通过协议(protocol)自定义UINavigationBar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59085208/

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