【问题标题】:Interactive UIView behind UITableViewUITableView 背后的交互式 UIView
【发布时间】:2015-02-18 12:13:20
【问题描述】:

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

这就是我想要完成的:

我希望UITableView's 内容滑到LSWeekView 之上

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

UITableView 现在被包裹在UIPageViewController 中,这使得用户可以从一天滑动到另一天。然后出现的问题是LSWeekView 现在与UITableView 一起滑动,并且还有多个LSWeekView 的实例。

到目前为止我已经尝试过:

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

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

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

希望你们能帮助我回到正轨,并提出一些解决问题的想法。

【问题讨论】:

    标签: ios objective-c iphone uitableview uiscrollview


    【解决方案1】:

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

    将 LSWeekView 作为子视图添加到您的父视图。 将表视图也作为子视图添加到相同的 parentView 但在层次结构中的 LSWeekview 之上。 设置tableView的contentInset

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

    并将 tableView 的 backgroundColor 设置为 clearColor。

    干杯。

    【讨论】:

    • 感谢您的回答!似乎无法与 LSWeekView 交互,因为它已被 UITableView 覆盖。虽然 pointInside: withEvent: 似乎解决了这个问题。问题是我不确定如何覆盖 UIPageViewController 子视图上的 pointInside: withEvent: 方法,因为它们是私有的?我将进一步探索这个解决方案。
    • 尝试子类化您的 tableView 并用 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { [self.nextResponder touchesBegan:touches withEvent:event]; [super touchesBegan:touches withEvent:event]; } 覆盖以下方法。 pageViewController 有一个 viewController 对象数组。所以每个viewControllers各自的view都是tableView和LSWeekView的superView。所以我不认为它是私人的。
    • 这不起作用,不是表格视图阻止了交互。我认为这是 pageViewController 的 scrollView 并且 scrollView 是私有的?不过,我也许可以将触摸事件直接委托给 weekView。我上班时会试一试。
    • 视图层次结构如下所示:UIView => [LSWeekView, UIScrollView => [UITableView, UITableView, UITableView]]。换句话说,我可以将触摸从 UITableView 发送到 UIScrollView,但不能从 UIScrollView 发送到 LSWeekView,因为 UIPageViewController 中的 UIScrollView 是私有的,所以我不能子类化它。我说的对吗?
    • 感谢您的帮助!非常感谢,请查看我的答案以获取解决方案。
    【解决方案2】:

    我最终在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 的帮助。

    【讨论】:

      猜你喜欢
      • 2013-10-23
      • 2019-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-22
      • 1970-01-01
      相关资源
      最近更新 更多