UITableView 背后的交互式 UIView

Interactive UIView behind UITableView

我已经为一个 UIScrollView 相关问题苦苦挣扎了大约一个星期,坦率地说,我似乎无法解决它。

这是我要完成的:

我希望 UITableView's 内容滑动到 LSWeekView

之上

在我的第一次迭代中,我通过将 LSWeekView 作为子视图添加到 UITableView 并将其固定在顶部,使一切正常。在最近进行一些更改之前,这确实非常有效。

UITableView 现在包含在 UIPageViewController 中,这使得用户可以从一天滑动到另一天。然后出现的问题是 LSWeekView 现在与 UITableView 一起滑动并且 LSWeekView.

也有多个实例

到目前为止我尝试过的:

  1. 一个 UIView,带有一个 LSWeekView 和一个 UITableView(包含在 UIPageViewController 中)作为子视图。通过使用 UITableView 的委托方法 scrollViewDidScroll:我能够调整原点 UITableView。这个解决方案的问题是我必须覆盖 UITableView 的 contentOffset 以便它在调整原点时不会滚动。不幸的是,这给 UITableView 的 momentum/deceleration 引入了一些问题。

  2. 一个 UIScrollView,带有一个 LSWeekView 和一个 UITableView(包含在 UIPageViewController 中)作为子视图。通过子类化 UITableView 和 UIScrollView 我能够允许同时平移。但是我不得不再次覆盖 contentOffset,以便 UITableViewUIScrollView 中平移时不会滚动,所以这个解决方案基本上也是同样的问题。

也许我想出的解决方案是可行的方法,我只需要通过应用我自己的减速等方法使它们工作。但是我觉得应该有更好的方法。

希望你们能帮助我回到正轨,提供一些解决方法。

这是一个更简单的方法,适用于我的类似需求。

将 LSWeekView 作为子视图添加到您的父视图。 将 table 视图也作为子视图添加到同一父视图,但在层次结构中位于 LSWeekview 之上。 设置 tableView 的 contentInset

 [tableView setContentInset:UIEdgeInsetsMake(requiredHeight, 0, 0, 0)];

并将 tableView 的背景颜色设置为 clearColor。

干杯。

我最终在 UIPageViewController 之上添加了 LSWeekView,然后在 UITableView 触发 scrollViewDidScroll: 时调整 LSWeekView 的大小。

布局子视图:

self.tableView.contentInset = UIEdgeInsetMake(100, 0, 0, 0);

scrollViewDidScroll:

CGRect frame = self.weekView.frame;
frame.size.height = 100 - scrollView.contentOffset.y;
if (frame.size.height < 0) {
    frame.size.height = 0;
}
self.weekView.frame = frame;

感谢@NavinDev 的帮助。