【问题标题】:Collection view scroll 'jumping' my textView back to the top集合视图滚动“跳”我的 textView 回到顶部
【发布时间】:2017-06-26 15:16:23
【问题描述】:

我有一个带有水平滚动容器视图和 UITextView(垂直滚动)的 ViewController。

在 viewWillLayoutSubViews() 中我有以下代码来设置 textView 到内容顶部的偏移量:

override func viewWillLayoutSubviews() {
    textViewWithScroll.setContentOffset(CGPoint.zero, animated: false)
}

问题是,如果我先向下滚动 textView,然后滚动集合视图,textView 会直接跳回顶部。我想阻止这种跳跃。

我找到的下一个最接近的解决方案是在 viewDidAppear 中设置内容偏移量。这可以防止滚动“跳跃” - 但是当视图首次加载时,会从 textView 的中间跳转到顶部。

如何让 textView 在内容顶部正确加载,而在 collectionView 滚动后不会跳回顶部?

【问题讨论】:

    标签: ios swift scroll uicollectionview


    【解决方案1】:

    尝试实现一个标志逻辑,强制 viewWillLayoutSubviews 中的代码只执行一次,因为布局子视图在视图控制器的生命周期中可能发生一百次。比如:

        private var isTextViewScrolled = false
    
        override func viewWillLayoutSubviews() {
            super.viewWillLayoutSubviews()
    
            if !isTextViewScrolled {
                textViewWithScroll.setContentOffset(CGPoint.zero, animated: false)
                isTextViewScrolled = true
            }
        }
    

    // 注意:如果遇到任何问题,请尝试将代码移至 viewDidLayoutSubviews。

    【讨论】:

    • 我喜欢这个解决方案。它很优雅,很重要,而且很简单!谢谢!! (注意——我确实需要将它添加到 viewDidLayoutSubviews)。
    猜你喜欢
    • 1970-01-01
    • 2016-12-19
    • 2019-07-06
    • 1970-01-01
    • 2013-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多