我最近在我的应用中实现了一个自定义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一样。
谢谢。
答案 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)
}
}