我在显示视频UIViewController中有一个UITableView。当我向下滚动时,我想要从一个大标题到一个小标题的动画。我目前使用的代码是:
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if #available(iOS 11.0, *) {
UIView.animate(withDuration: 0.35, animations: {
if scrollView.contentOffset.y <= 128 {
self.navigationItem.largeTitleDisplayMode = .always
} else {
self.navigationItem.largeTitleDisplayMode = .never
}
})
}
}
但在转换时,它似乎非常跳跃。做这件事的更好的方法是什么?
发布于 2017-10-15 02:06:58
如果您符合UITableViewDelegate,请添加以下代码:
var canTransitionToLarge = false
func scrollViewDidScroll(_ scrollView: UIScrollView) {
func animate(){
self.navigationController?.navigationBar.setNeedsLayout()
self.view.setNeedsLayout()
UIView.animate(withDuration: 0.25, animations: {
self.navigationController?.navigationBar.layoutIfNeeded()
self.view.layoutIfNeeded()
})
}
if canTransitionToLarge && scrollView.contentOffset.y <= 0 {
self.navigationItem.largeTitleDisplayMode = .always
animate()
canTransitionToLarge = false
}
else if !canTransitionToLarge && scrollView.contentOffset.y > 0 {
self.navigationItem.largeTitleDisplayMode = .never
animate()
canTransitionToLarge = true
}
}
如果不符合UITableViewDelegate,请将ScrollViewDelegate
添加到您的ViewController:
class ViewController: UIViewController, UIScrollViewDelegate
https://stackoverflow.com/questions/46375827
复制相似问题