我在 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
}
})
}
}
但是转换的时候看起来很跳。有什么更好的方法来做到这一点?
最佳答案
如果您符合 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
关于iOS 11 动画大标题显示模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46375827/