滚动视图内的pageviewcontroller内的iOS tableview
Posted
技术标签:
【中文标题】滚动视图内的pageviewcontroller内的iOS tableview【英文标题】:iOS tableview inside pageviewcontroller inside scrollview 【发布时间】:2018-12-03 18:06:24 【问题描述】:我想在滚动视图内的 pageviewcontroller 中放置一个 tableView。
所以我的故事板中有:
所有约束都像这样得到尊重
我禁用了 tableview 滚动,但我的滚动不滚动,我在 TestVC1 中的 tableView 没有展开 TestVC 中的 PagerPlace
如何让我的滚动视图滚动,它的内容大小取决于 tableview 高度 + 我的红色视图?
编辑
我尝试了您的解决方案,然后我得到了这样的故事板: storyboard
然后我的scrollview不滚动,不知道为什么,
【问题讨论】:
不,我想要一个在 TestVC 中的滚动视图,它包含:标题(红色框),类似于 pageviewcontroller(带有标签(白色框))和 uipageviewcontroller 的子项,我有一个自定义大小的表格视图,所以我想滚动所有页面,而不仅仅是我的表格视图 这是我在 UIPageViewController 上的经典答案——也许会有所帮助。 ***.com/questions/18398796/… 不,它不会左右翻页 你是说有一个表格视图,它位于红色区域下方?对吗? 在我的情况下,我有 2 个 uipageviewcontroller 的孩子,每个孩子都有 1 个 tableview,但想象一下,如果只有 1 个选项卡有一个 tableview,另一个没有,我该如何实现它? 【参考方案1】:为了让你的效果完美。
Scroll View -> UIPageViewController's view -> UITableView
Scroll View 有 UIPageViewController 的视图的子视图,
UIPageViewController 有很多页面,一个页面(一个控制器的视图)有一个 UITableView 的子视图
是的。您可以更改解决方案。
mainScrollView ( vertical slide ) -> contentScrollView ( horizontal slide ) -> contentStackView ( has many pages) -> UITableView ( one page )
mainScrollView是UIScrollView,垂直滑动,
contentScrollView是UIScrollView,横向滑动
contentScrollView.isPagingEnabled = true
模拟UIPageViewController
contentStackView有很多页,一页是你的UITableView
让它像这样工作:
如何让我的滚动视图滚动,它的内容大小取决于 tableview 高度 + 我的红色视图?
对于 UITableView 上面的部分
public func scrollViewDidScroll(_ scrollView: UIScrollView)
if scrollView == mainScrollView
// vertical
let offsetY = scrollView.contentOffset.y
if offsetY >= sillValue
scrollView.contentOffset = CGPoint(x: 0, y: sillValue)
currentChildScrollView?.am_isCanScroll = true
scrollView.am_isCanScroll = false
else
let negScroll = (scrollView.am_isCanScroll == false)
if negScroll
scrollView.contentOffset = CGPoint(x: 0, y: sillValue)
对于 UITableView 部分
使用 KVO 控制基本滚动视图的偏移量 Y,
UITableView 的偏移量 Y 是默认的。
let keyValueObservation = currentChildScrollView?.observe(\.contentOffset, options: [.new, .old], changeHandler: [weak self] (scrollView, change) in
guard let self = self, change.newValue != change.oldValue else
return
self.childScrollView(didScroll: scrollView)
)
internal func childScrollView(didScroll scrollView: UIScrollView)
let scrollOffset = scrollView.am_originOffset.val
let offsetY = scrollView.contentOffset.y
if scrollView.am_isCanScroll == false
scrollView.contentOffset = scrollOffset
else if offsetY <= scrollOffset.y
scrollView.contentOffset = scrollOffset
scrollView.am_isCanScroll = false
mainScrollView.am_isCanScroll = true
the full code in github
【讨论】:
以上是关于滚动视图内的pageviewcontroller内的iOS tableview的主要内容,如果未能解决你的问题,请参考以下文章
为啥在 PageViewController 中会出现这种类型的滚动?