代码之家  ›  专栏  ›  技术社区  ›  Scott

使用UITableView时出现奇怪的滚动问题

  •  1
  • Scott  · 技术社区  · 16 年前

    我是一个正在工作的UINavigationController,在堆栈上下推送两个不同的uitableview。除了滚动,我的所有功能都正常工作。当其中一个表格滚动到顶行上方或底行下方时,它会停留在那里,露出表格上方/下方的边距。我正在寻找能“反弹”回来的桌子,这样就只有桌子是可见的,而不是外面的空白区域——就像任何其他iPhone应用程序一样。

    我的一个UITableView是由NIB加载的,另一个是通过编程创建的,两者的结果完全相同。我已经尝试了笔尖中的所有反弹和滚动设置,但似乎没有任何效果。

    有人能告诉我我做错了什么吗?请让我知道,如果我可以更具体地详细说明我的问题。

    -斯科特

    我想补充一些信息,因为我仍然无法解决这个问题。我应该指出,我试图添加此NavigationController的应用程序不是主视图。我有一个setingsviewcontroller,它使用Nib来加载。在该控制器中,我希望创建一组新的基于导航的视图。因此,在我的设置视图控制器中,如果用户点击一个按钮,我。。。

    
    TextListViewController *controller = [[TextListViewController alloc] initWithStyle:UITableViewStylePlain];
    
    

    controller.title = @"Test Table View"; navController = [[UINavigationController alloc] initWithRootViewController:controller]; navController.modalTransitionStyle = UIModalTransitionStyleCoverVertical; [self presentModalViewController:navController animated:YES]; [controller release];

    除了滚动之外,上面的代码在任何方面都可以完美地工作。我能够处理所有委托方法,并将新控制器推送到堆栈上。我遇到的唯一问题是根控制器(以及每推一个其他控制器)无法正确滚动。

    在任何情况下,它都允许我滚动通过表格的顶部和底部,而不是像它应该的那样快速返回。当你轻弹滚动时,它也没有自由转动的感觉。相反,无论你滚动的速度有多快,只要你移开手指,它就会停止。很奇怪。

    谢谢你的帮助,凯文,但我仍在这里寻求帮助。

    谢谢

    4 回复  |  直到 13 年前
        1
  •  2
  •   Scott    16 年前

    嗯,我解决了这个问题,它与我如何将UITableView添加到UINavigationController或如何实例化视图无关。事实证明,这与任何一件事都毫无关系。

    我正在使用一个紧密的while循环来处理我的游戏循环。我需要一种在循环中处理操作系统消息的方法,以防止触摸和其他事件被阻止。以下是我在循环中使用的内容:

    
    while(CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.002, TRUE) == kCFRunLoopRunHandledSource);
    

    直到这个滚动问题出现之前,我对这个实现没有任何问题。无论出于何种原因,这都破坏了UITableView的滚动功能。

    我改变了我的游戏循环,所以不需要上面的代码,一切都开始工作了。

    谢谢

        2
  •  0
  •   easeout    16 年前

    你的 UITableView UIScrollView ,谁的财产 bounces 这是关键。这是我的建议 reference . 默认情况下是这样的 YES

        3
  •  0
  •   easeout    16 年前

    您的问题和评论似乎表明您正在附加 UITableView 给你 UINavigationController UITableViewController . 如果你不这样做,你真的应该这样做。

    通常,如果可以将子视图控制器推送到 导航控制器 表格控制器 让我们查看窗口的根视图,看看这是否符合预期。这样,您就可以将问题隔离到表视图部分或导航部分。

        4
  •  0
  •   new299    13 年前

    我遇到了与您相同的问题,正如您在上面所述,这与您调用runloop的方式有关:

    while(CFRunLoopRunInMode(kCFRunLoopDefaultMode, 0.002, TRUE) == kCFRunLoopRunHandledSource);
    

    似乎DefaultMode是错误的等待方式,我将代码更改为等待UITrackingRunLoopMode,TableView工作正常。就我而言,我使用了:

    [[NSRunLoop currentRunLoop] runMode:UITrackingRunLoopMode beforeDate:[NSDate distantFuture]];
    

    一切正常。

    推荐文章