首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >iOS 11动画largeTitleDisplayMode

iOS 11动画largeTitleDisplayMode
EN

Stack Overflow用户
提问于 2017-09-23 11:46:51
回答 1查看 538关注 0票数 0

我在显示视频UIViewController中有一个UITableView。当我向下滚动时,我想要从一个大标题到一个小标题的动画。我目前使用的代码是:

代码语言:javascript
运行
复制
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
                }
            })
        }
    }

但在转换时,它似乎非常跳跃。做这件事的更好的方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2017-10-15 02:06:58

如果您符合UITableViewDelegate,请添加以下代码:

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
class ViewController: UIViewController, UIScrollViewDelegate 
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46375827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档