向下滚动表视图时,如何使UINavBar自定义标签消失?

时间:2019-06-13 11:31:08

标签: ios swift uinavigationcontroller uilabel uinavigationbar

我最近在我的应用中实现了一个自定义UINavigationBar,该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 个答案:

答案 0 :(得分:1)

您可以尝试以下代码:

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