ios - 当用户在 TableView 中向下滚动时,如何将 UINavigationBar 背景颜色从透明更改为红色

标签 ios swift uitableview uiscrollview uinavigationbar

我有一个表格 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
    }
}

最佳答案

难道导航栏是半透明的吗? 像这样:

enter image description here

使用以下方法更改它:

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/

相关文章:

ios - 使用 URLSession 和 Codable 解析 JSON 数据

ios - 无法呈现/推送另一个 View Controller

swift:使用 UIDatePicker 从动态单元格将值发送回 UITableViewController

ios - 先下载数据,然后在 TableViewcontroller 上显示

ios - UITableView 行选择故障?

ios - Android Studio KMM 应用程序项目 - 为 ios 平台构建失败

ios - 为什么 magnetic Field.field 的值固定为零?

ios - SpriteKit SKVideoNode 未出现在屏幕上,但可以听到声音

arrays - Swift2 检查字典中的数组

objective-c - 所有UI前面的透明UIImageView