向下滚动 table 视图时,如何使自定义标签作为 NavBar 消失?

How to make custom label as UINavBar disappear when scrolling down a table view?

我最近在我的应用程序中实现了一个自定义 UINavigationBar,它使用标签而不是普通的 largeTitle。当用户向下滚动 table 视图时,我一直试图让它消失。

到目前为止,我已尝试在显示第三个单元格时设置 label.isHidden = true,因为这是不在原始页面上的下一个单元格,因此表示滚动。然而,这意味着标签不会消失,直到滚动到一定数量。

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

    if indexPath == 2 {

        label.isHidden = true

    }

}

相反,我希望这个自定义导航栏标签在滚动开始后立即隐藏,并在滚动回到顶部时重新出现,就像默认的 UINavigationBar 一样。

谢谢。

您可以试试下面的代码:

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

或者如果你想要和UINavigationBar一样的动画隐藏/显示,使用下面的代码:

 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)
        }
    }