iOS 11 动画大标题显示模式

标签 ios swift uitableview ios11

我在 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/

相关文章:

arrays - 从 JSON 数组中提取数据以制作 3 个不同的数组

ios - 重用 UITableView 中的单元格

ios - 如何最小化 iOS8 "UIVisualEffectView with Blur"的视觉闪烁

ios - 用于注释的分段 Controller

ios 应用程序 - 同时在多个 Segue 上崩溃(在一个动画播放时转到其他 Segue)

swift - 在文件顶部添加一个字符串

ios - 以奇怪的行为一次关闭多个 View Controller

swift - SKSpriteNode 隐藏在父节点下方

ios - 自动将其中的自定义 UITableViewCell 和 Label 调整为文本

ios - iOS 中不明确的崩溃报告