通过点击状态栏滚动到UITableView的顶部

iOS*_*Dev 57 scroll objective-c statusbar tableview ios

我知道有很多代码可以将tableview滚动到顶部,但我想在顶部状态栏被点击时这样做,就像Apple的原生应用程序一样.这可能吗?

Mar*_*off 149

你可以免费获得这个,但你应该检查你的scrollsToTop属性UITableView是否.

当这不起作用时,你有一个UIScrollView(或UITextView的后代类)对象嵌入在另一个UIScrollView类(如UITableView)中.在这种情况下,将scrollsToTop嵌入UIScrollView类设置为NO.然后tap-the-status-bar行为将起作用.

  • 我已经尝试了你的建议 - 将嵌入式scrollview的scrollsToTop设置为NO - 但状态栏点击仍然不会导致顶部scrollview滚动到顶部. (8认同)
  • @CharlieMezak请注意,`scrollsToTop = NO`规则必须应用于__window__中的所有视图.例如,如果您有侧边菜单. (5认同)
  • 在我的例子中,我在垂直滚动表视图中有一些水平滚动的集合视图,将`scrollsToTop`设置为`NO`以获取所有工作的集合视图.似乎不直观,但它有效! (4认同)
  • 这非常有效.@CharlieMezak也许您在屏幕上有多个嵌入式滚动视图.除了视图层次结构顶部的滚动视图外,它们都必须设置为NO. (3认同)

Zan*_*aes 31

如果您来自Google并需要完整的清单:

  1. 检查您是否在UITableView上设置了scrollsToTop = YES(根据Mark的建议)
  2. 确保在窗口中的所有其他UITableViews/UIScrollViews/UITextViews上设置了scrollsToTop = NO,这样它们就不会拦截点击.我发现自己多次在窗口中打印出所有视图来调试这个......
  3. 确保您的表视图位于窗口内的0/0(x/y坐标) - 这是系统知道它应该传递消息的方式

  • 如果它在子视图控制器中将其置于窗口内的0,0以下怎么办? (8认同)
  • 正如@shim问的那样 - @ Zane/@Kyle - 如果它在一个子视图控制器中将它置于窗口内的0,0以下怎么办? (2认同)

小智 6

使用其他答案中给出的信息,我将以下代码添加到我的UITableViewController让它工作:

- (void)viewDidLoad
{
    [super viewDidLoad];

    for (UITextView *view in self.view.subviews) {
        if ([view isKindOfClass:[UITextView class]]) {
            view.scrollsToTop = NO;
        }
    }

    self.tableView.scrollsToTop = YES;
}

这将查看UITableViewController层次结构中的所有视图,并在拦截触摸事件的所有UITextView上关闭scrollsToTop.然后,确保tableView仍然会接收到触摸.

你可以修改它来遍历可能正在拦截的其他UITableViews/UIScrollViews/UITextViews.

希望这可以帮助!


iOS*_*per 6

我有同样的问题,但通过以下步骤修复:

  1. 为tableview设置scrollsToTop = YES,你想滚动到顶部.
  2. 为所有其他tableview或集合视图或scrollview设置scrollsToTop = NO.
  3. 如果您的任何tableview单元格都有集合视图.确保将集合视图的scrollsToTop设置为NO.

如果视图控制器/导航控制器作为子视图添加到另一个视图控制器上,请确保将其设置为子控制器.