嵌套的 UIScrollviews 行为异常

Posted

技术标签:

【中文标题】嵌套的 UIScrollviews 行为异常【英文标题】:Nested UIScrollviews behaving strangely 【发布时间】:2018-10-26 00:07:02 【问题描述】:

我有以下自动布局驱动的设置:

主视图控制器,里面有一个滚动视图。滚动视图固定到超级视图边缘。这个上下滚动。 滚动视图顶部的一些正常、固定大小的视图

另一个滚动视图。这个左右滚动。第二个滚动视图包含几个并排的表格视图。这个想法是用户可以在它们之间切换。它们都包含少量单元格,宽度都与屏幕相同,高度为 72pts。

我要解决的问题是 tableview 内容的大小不同。左边的有 6 个单元格,右边的有 3 个。

我的第一种方法是动态更改第二个滚动视图的高度以匹配当前可见的表视图。最终发生的情况是,如果动画设置为 true,则在两个 tableviews 之间切换(通过 setContentOffset:animated:) 会出现极大的错误 - 它会调整内容偏移量,因此一切都在屏幕外。事实上,它会将内容偏移设置为 ,然后当我切换时,大约十几次,然后它会重置。很奇怪,我放弃了。

现在我正在尝试调整主滚动视图的内容插入以抵消当前表格视图内容的差距,这也很奇怪。当我在 viewDidLoad 中设置底部内容插图时,它工作正常。当我在 tableview 变为当前时设置它时,它什么也不做。

什么给了?哪些情况会导致这些视图交互行为不正常?

【问题讨论】:

据我所知,问题主要是您可能没有设置滚动视图的内容大小。将第一个scrollView的contentSize设置为(view.width,1000)和第二个scrollView的contentSize(1000,view.height),并手动设置tableView的大小,看看问题是否仍然存在。如果没有,那么剩下的就是在运行时正确计算内容大小。 您能否发布一个模拟您所面临的相同行为的示例项目。 你能贴一张你的视图层次的图片吗? 另外,发布约束 你能分享你的示例代码吗? 【参考方案1】: 为每个表使用不同的tableViewController。 将它们嵌入pageViewController。 在pageViewControllers 视图的顶部添加几个正常的、固定大小的视图。 符合scrollViewDelegate in pageViewController。 将 scrollViewDidScroll 从 tableViews 传递给 pageViewController。 设置 tableViews inset 以匹配顶部固定大小的视图。 根据滚动改变高度。

这是实现所需功能的方式。 希望对你有帮助。

【讨论】:

以上是关于嵌套的 UIScrollviews 行为异常的主要内容,如果未能解决你的问题,请参考以下文章

iOS嵌套的UIScrollViews没有响应

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

处理嵌套 UIScrollViews 中的冲突手势

处理滚动嵌套 UIScrollViews 在同一方向滚动

嵌套 UIScrollViews 中的滚动问题

嵌套的 UIScrollViews 和事件路由