Как отобразить тень под панелью навигации только после прокрутки пользователем? - PullRequest
1 голос
/ 01 июля 2019

По сути, я хотел бы включить радиус тени под панелью навигации, как только пользователь начнет прокручивать. Панель навигации находится в контроллере TableView, когда контроллер представления впервые открывается, контроллер навигации должен находиться в своем нормальном состоянии, но как только пользователь начинает прокручивать, появляется тень.

Ниже приведен код для создания тени под панелью навигации:

    //Adds Shadow below navigation bar
    self.navigationController?.navigationBar.layer.masksToBounds = false
    self.navigationController?.navigationBar.layer.shadowColor = UIColor.lightGray.cgColor
    self.navigationController?.navigationBar.layer.shadowOpacity = 0.8
    self.navigationController?.navigationBar.layer.shadowOffset = CGSize(width: 0, height: 2.0)
    self.navigationController?.navigationBar.layer.shadowRadius = 2

Как это можно включить только тогда, когда пользователь начинает прокручивать?

Ответы [ 2 ]

0 голосов
/ 01 июля 2019

Добавьте это к вашему View Controller:

override func viewDidLoad() {
    super.viewDidLoad()

    self.navigationController?.navigationBar.layer.masksToBounds = false
    self.navigationController?.navigationBar.layer.shadowColor = UIColor.lightGray.cgColor
    self.navigationController?.navigationBar.layer.shadowOpacity = 0
    self.navigationController?.navigationBar.layer.shadowOffset = CGSize(width: 0, height: 2.0)
    self.navigationController?.navigationBar.layer.shadowRadius = 2
}


override func scrollViewDidScroll(_ scrollView: UIScrollView) {

    self.navigationController?.navigationBar.layer.shadowOpacity = 0.8
}

Если вы хотите удалить тень, когда прокрутка остановится, вы можете сбросить значения до нормальных в этом методе:

func scrollViewDidEndDecelerating(_ scrollView: UIScrollView) {

    self.navigationController?.navigationBar.layer.shadowOpacity = 0

}

Возможно, вы захотите сделать то же самое, когда пользователь перетаскивает TableView вместо прокрутки, в этом случае также добавьте эти два:

override func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {

    self.navigationController?.navigationBar.layer.shadowOpacity = 0.8

}

override func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {

    self.navigationController?.navigationBar.layer.shadowOpacity = 0

}
0 голосов
/ 01 июля 2019

Вам необходимо добавить эти строки, чтобы отобразить тень для функции, и вызвать эту функцию из следующего метода делегата:

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;

Также может помочь вызвать противоположностьваша функция showShadow, которая удалит тень в следующем методе делегата:

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...