swift - 如何撤消 iOS 11 中的透明导航栏?
问题描述
我正在尝试在 iOS 11 中创建一个透明的导航栏。
我将以下代码放在 VC 中,它可以工作,但是当另一个 VC 被推到顶部时它保持透明。
(我认为再次将 backgroundImage 设置为 nil 会起作用,但事实并非如此。)
新VC推送时如何获得白色背景?
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.navigationBar.prefersLargeTitles = false
self.navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
self.navigationController?.navigationBar.shadowImage = UIImage()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
self.navigationController?.navigationBar.prefersLargeTitles = true
self.navigationController?.navigationBar.setBackgroundImage(nil, for: .default)
self.navigationController?.navigationBar.shadowImage = nil
}
解决方案
您可以添加扩展以简化与UINavigationBar的交互
extension UINavigationBar {
func makeTransparent() {
self.setBackgroundImage(UIImage(), for: .default)
self.shadowImage = UIImage()
self.isTranslucent = true
}
func undoTransparency() {
self.setBackgroundImage(nil, for: .default)
}
func makeLargeAndTransparent() {
makeTransparent()
self.prefersLargeTitles = true
self.backgroundColor = .clear
self.barTintColor = *barTintColor*
self.tintColor = *tintColor*
self.largeTitleTextAttributes = [
.font: *font.of(size: 34)*,
.foregroundColor: *foregroundColor*
]
self.titleTextAttributes = [
.font: *font.of(size: 17)*,
.foregroundColor: *foregroundColor*
]
}
func makeDefault() {
undoTransparency()
self.prefersLargeTitles = false
self.barTintColor = *barTintColor*
self.tintColor = *tintColor*
self.titleTextAttributes = [
.font: *font.of(size: 17)*,
.foregroundColor: *foregroundColor*
]
}
}
推荐阅读
- html - 如何修复这个界面(简单的html/css)
- javascript - Angular 中的组件通信从子组件到父组件失败
- python - 如何使用python请求返回在网页中找到字符串匹配的整行
- python - 根据条件获取pandas multiindex中的索引值
- android - 将绑定对象传递给 viewmodel 的好习惯
- c# - Selenium webdriver 多线程
- javascript - 如何使活动幻灯片的高度从下到上增长?
- javascript - 为什么我的异步 jQuery ajax 调用阻塞?
- mysql - Mysql比较日期是否距离现在至少两天
- javascript - Javascript - 使用 Fetch 编辑表单