我有一个表格 View ,前面有一个导航栏。 我希望当用户向下滚动时,导航栏的背景颜色开始从透明变为红色,就像增加 alpha 一样。
对我来说,问题是当用户向下滚动时,导航栏背景 alpha 将为 1.0,用户仍然可以看到导航栏后面!
这是我的代码:
override func viewDidLoad() {
super.viewDidLoad()
self.mainProfileTableView.contentInset = UIEdgeInsetsMake(-44,0,0,0);
self.navigationController?.navigationBar.isOpaque = true
UIApplication.shared.statusBarView?.backgroundColor = UIColor.init(red: 180/255, green: 40/255, blue: 56/255, alpha: 1.0)
self.navigationController?.navigationBar.barTintColor = UIColor.init(red: 180/255, green: 40/255, blue: 56/255, alpha: 1.0)
self.navigationController?.navigationBar.setBackgroundImage(UIImage(named : "navigationBarBackGround"), for: .default)
self.navigationController?.navigationBar.shadowImage = UIImage()
self.navigationController?.navigationBar.isTranslucent = true
self.navigationController?.view.backgroundColor = UIColor.init(red: 180/255, green: 40/255, blue: 56/255, alpha: 1.0)
}
这是检测用户向上或向下滚动的方法
var lastContentOffset: CGFloat = 0
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if (self.lastContentOffset < scrollView.contentOffset.y) {
// moved to top
print("move Up\(scrollView.contentOffset.y)")
print("alpha\(Float(scrollView.contentOffset.y / 166))")
navigationController?.navigationBar.alpha = scrollView.contentOffset.y / 166
} else if (self.lastContentOffset > scrollView.contentOffset.y) {
// moved to bottom
navigationController?.navigationBar.alpha = scrollView.contentOffset.y / 166
print("alpha\(Float(scrollView.contentOffset.y / 166))")
print("move down\(scrollView.contentOffset.y)")
} else {
// didn't move
}
}
最佳答案
难道导航栏是半透明的吗? 像这样:
使用以下方法更改它:
self.navigationController?.navigationBar.isTranslucent = False
并删除:
self.navigationController?.navigationBar.setBackgroundImage...
self.navigationController?.navigationBar.shadowImage = UIImage()
然后在用户滚动时修改barTintColor
。
关于ios - 当用户在 TableView 中向下滚动时,如何将 UINavigationBar 背景颜色从透明更改为红色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48421417/