UIWindow中的iOS UIScrollView

Posted

技术标签:

【中文标题】UIWindow中的iOS UIScrollView【英文标题】:iOS UIScrollView in UIWindow 【发布时间】:2013-03-30 22:28:27 【问题描述】:

我目前正在制作一个 ios 项目,其中我有一个 UIScrollView 作为 UIWindow 的直接子视图(使用 [window addSubview:scrollView];)。窗口的框架及其内容已正确设置,contentSize 设置为大于窗口的框架。当我尝试滚动 UIScrollView 时,它根本不滚动。 scrollEnabledpagingEnabled 都设置为 YES,但滚动视图不滚动,这让我相信滚动视图甚至没有接收到触摸/滚动事件。如果有任何区别,窗口会添加一个UITapGestureRecognizer。我是否需要以某种方式将滑动事件转发到UIScrollView,还是有其他原因导致它不滚动?

编辑:这是一些代码。

   float count=ceil([self.msgArray count]/2); //msgArray has length of 3+, NSLog()'d and confirmed.
   float contentHeight=97.5 * count;
   [dataScrollView setContentSize:CGSizeMake(320,contentHeight)];
   dataScrollView.userInteractionEnabled=YES;
   dataScrollView.pagingEnabled=YES;
   dataScrollView.scrollEnabled=YES;
   dataScrollView.clipsToBounds=YES; //Have also tried with this set to NO, or not set at all.
   //Add subviews to dataScrollView.

编辑:这里有更多信息。 记录时 contentHeight 为 195.00。我已经删除了委托方法,我又回到了使用滚动视图的直接子视图。窗口高度为 97.50。

编辑:我还从 UIWindow 中删除了 UITapGestureRecognizer,但滚动视图仍然不滚动。

【问题讨论】:

请贴一些代码。 成为事物的代表,看看是否正在调用 -scrollViewDidScroll。或者子类化它并覆盖触摸处理以进行更具体的检查 @lk.查看编辑。添加代码。 @AehmloLxaitn 不幸的是,UIScrollView 不是这样工作的。我会写一个答案。 哦,我明白了,这不可能与问题有关,还好你没有提到它。 【参考方案1】:

啊,UITapGestureRecognizer!这可能是我在自己的项目中花了几个小时才弄清楚的错误。它的cancelsTouchesInView 属性是否设置为应有的NO? (YES 是默认设置...如果您不期待它,它真的会让您失望。)

【讨论】:

我将cancelsTouchesInView 设置为NO,但仍然无法滚动。 当。我确定就是这样。 谢谢。好主意。【参考方案2】:

只需记录滚动视图边界的宽度/高度。您设置的内容高度应大于滚动视图高度。如果它更多,那么滚动视图会自动启用它的滚动。

【讨论】:

我做到了。内容高度更大,并且滚动视图不滚动。 您的内容高度 195 不会大于窗口框架高度。无论您在哪里记录内容高度,记录滚动视图高度。 滚动视图的框架高度为 97.5。

以上是关于UIWindow中的iOS UIScrollView的主要内容,如果未能解决你的问题,请参考以下文章

iOS App 正在创建两个 UIWindow

UIWindow 中的 UIScreen 属性有啥用?

MvvmCross 6 中的子类 UIWindow

iOS:为啥 UIWindow 不显示?

iOS开发UI篇—UIWindow简单介绍

iOS:以编程方式创建 UIWindow 导致位置错误