滚动时导航栏上的阴影图像

时间:2018-03-16 18:49:10

标签: ios swift uinavigationcontroller uinavigationbar

我发现我能够在导航栏上设置阴影图像,但我只想在滚动时设置它,而无法找到如何执行此操作。任何帮助赞赏!!

2 个答案:

答案 0 :(得分:1)

UIScrollView

您可以从UITableView.setTrash(true)访问此委托方法,因为后者是前者的子类。

答案 1 :(得分:0)

您可以将此代码与scrollViewDidScroll(_:)

一起使用
import UIKit

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, UIScrollViewDelegate {

   @IBOutlet weak var tableView: UITableView!

   override func viewDidLoad() {
       super.viewDidLoad()

       tableView.dataSource = self
       tableView.delegate = self

       tableView.rowHeight = UITableViewAutomaticDimension
       tableView.estimatedRowHeight = 44
   }


   func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

       let cell = UITableViewCell()
       cell.textLabel?.text = "Hello"

       return cell
   }

   func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
       return 10
   }

   func scrollViewDidScroll(_ scrollView: UIScrollView) {

       guard let navBar = navigationController?.navigationBar else {
           return
       }

       if scrollView.contentOffset.y > navBar.frame.height {
           addShadow(navBar)
       } else {
           deleteShadow(navBar)
       }
   }

   func addShadow(_ view: UIView) {
       view.layer.shadowColor = UIColor.gray.cgColor
       view.layer.shadowOffset = CGSize(width: 0.0, height: 6.0)
       view.layer.masksToBounds = false
       view.layer.shadowRadius = 10.0
       view.layer.shadowOpacity = 0.5
   }

   func deleteShadow(_ view: UIView) {
       view.layer.shadowOffset = CGSize(width: 0, height: 0.0)
       view.layer.shadowRadius = 0
       view.layer.shadowOpacity = 0
   }
}