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

Недавно я внедрил пользовательскую панель UINavigationBar, в которой вместо обычного LargeTitle используется метка.Я пытался заставить это исчезнуть, когда пользователь прокручивает представление таблицы.

До сих пор я пытался установить label.isHidden = true, когда отображается третья ячейка, поскольку это следующая ячейка, отсутствующая висходная страница и так указывает на прокрутку.Однако это означает, что метка не исчезнет до тех пор, пока не будет прокручена определенная сумма.

override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {

    if indexPath == 2 {

        label.isHidden = true

    }

}

Вместо этого я бы хотел, чтобы эта пользовательская метка navBar была скрыта, как только начинается прокрутка, и вновь появлялась, когда прокрутка возвращаетсянаверх, как и UINavigationBar по умолчанию.

Спасибо.

1 Ответ

1 голос
/ 13 июня 2019

Вы можете попробовать следующий код:

func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
    if(velocity.y > 0) {
        self.navLabel.isHidden = true
    } else {
        self.navLabel.isHidden = false
    }
}

Или Если вы хотите анимацию, аналогичную UINavigationBar Hide / Show, используйте следующий код:

 func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
        if(velocity.y > 0) {

            UIView.animate(withDuration: 0.5, delay: 0, options: UIView.AnimationOptions(), animations: {
                let labelFrame = self.navLabel.frame
                self.navLabel.frame = CGRect(x: labelFrame.origin.x, y: -64, width: labelFrame.size.width, height: labelFrame.size.height)
            }, completion: nil)

        } else {
            UIView.animate(withDuration: 0.5, delay: 0, options: UIView.AnimationOptions(), animations: {
                let labelFrame = self.navLabel.frame
                self.navLabel.frame = CGRect(x: labelFrame.origin.x, y: 0, width: labelFrame.size.width, height: labelFrame.size.height)
            }, completion: nil)
        }
    }
...