我有一个带有水平滚动容器视图和UITextView(垂直滚动)的ViewController。
在viewWillLayoutSubViews()中的我有以下代码将textView的偏移量设置为内容的顶部:
override func viewWillLayoutSubviews() {
textViewWithScroll.setContentOffset(CGPoint.zero, animated: false)
}
问题是如果我首先向下滚动textView,那么滚动集合视图,textView会向右跳回到顶部。我想阻止这种跳跃。
我找到的下一个最接近的解决方案是在viewDidAppear中设置内容偏移量。这可以防止滚动“跳转” - 但是当视图首次加载时,会从textView的中间跳到顶部。
如何将textView加载到内容的顶部,一旦滚动collectionView,它就不会跳回到顶部?
答案 0 :(得分:1)
尝试实现一个标志逻辑,强制viewWillLayoutSubviews中的代码只执行一次,因为布局子视图在视图控制器的生命周期中可能会发生一百次。类似的东西:
private var isTextViewScrolled = false
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
if !isTextViewScrolled {
textViewWithScroll.setContentOffset(CGPoint.zero, animated: false)
isTextViewScrolled = true
}
}
//注意:如果您遇到任何问题,请尝试将代码移至viewDidLayoutSubviews。