UIScrollView:没有滚动

Posted

技术标签:

【中文标题】UIScrollView:没有滚动【英文标题】:UIScrollView: Nothing is scrolling 【发布时间】:2016-07-05 20:05:33 【问题描述】:

我正在尝试让 UIScrollView 正常工作,但遇到了一些困难。当我尝试滚动时,我的屏幕上什么都没有移动。

没有内容大小歧义警告,这让我相信我已经正确设置了我的内容大小并且约束(我希望)很好(我有一个视图,其中包含一个滚动视图,其中包含一个视图4 个文本字段和一个文本视图)。

我尝试使用 viewDidLayoutSubviews() 以编程方式将内容大小设置为非常大,但这也无济于事。

我在这些方法中添加了:

func scrollViewWillBeginDragging(scrollView: UIScrollView) 
    print("touch detected")


func scrollViewDidScroll(scrollView: UIScrollView) 
    print("scrolling happened")

当我运行我的应用程序并尝试手动滚动时,“检测到触摸”会打印一次,“滚动发生”会打印很多次。我很困惑,因为似乎调用了正确的方法,但我看不到任何滚动。

另外,我还有这个方法:

func keyboardWasShown(aNotification: NSNotification) 
    let info = aNotification.userInfo
    let kbSize = info![UIKeyboardFrameBeginUserInfoKey]?.CGRectValue().size
    let contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize!.height, 0.0)
    scrollView.contentInset = contentInsets
    scrollView.scrollIndicatorInsets = contentInsets

但是,即使我单击被键盘覆盖的文本字段,我的屏幕也不会向上滚动。

我已经尝试在此处搜索实现很多解决方案,但似乎没有任何帮助。如果有人对可能出现的问题有任何想法,我将不胜感激!非常感谢!!

【问题讨论】:

您应该真正展示如何设置滚动视图及其内容的代码 我通过情节提要完成了这一切......我不确定如何展示它?我应该截图约束吗? 【参考方案1】:

滚动视图是自动布局的一个例外情况。确保您已按照Technical Note TN2154 中的说明配置约束。

此外,如果您的委托方法指示正在滚动,但您没有看到内容移动,请仔细检查内容是否实际上是滚动视图的子视图,而不是滚动视图的父视图的子视图只是覆盖滚动视图。

请记住,UIKit 只能在主线程上使用——滚动视图的奇怪行为是尝试从后台线程使用 UIKit 的症状之一。

最后,使用the view debugger built into Xcode 在运行时检查视图层次结构。

【讨论】:

据我所知,我的约束是这样配置的,我的内容实际上是一个子视图。我怎么知道我是否在后台线程上使用 UIKit?另外,我对此有点陌生,所以我可以就如何使用调试器找出问题所在有一些进一步的指导吗?谢谢你的帮助!! 知道了!!这实际上是我的约束有问题,我的内容视图中的顶部内容被固定到滚动视图之外的东西,它不应该是。非常感谢!! 如果您不知道您是否使用后台线程,那么您几乎可以肯定没有。您只需单击视图调试器按钮并像在this video 中一样查看您的视图。

以上是关于UIScrollView:没有滚动的主要内容,如果未能解决你的问题,请参考以下文章

何时使用 UITouch 与 UIScroll

UIScrollView 不使用 RubyMotion 滚动

滚动 UIScrollView 时如何缩放

滚动发生时嵌套 UIScrollViews 并获取信息

UIScrollView 滚动问题之上的 UICollectionView

UICollectionViewCell与UIScrollView取消didSelectItemAtIndexPath