使用UITableView的奇怪滚动问题

时间:2010-01-19 05:35:14

标签: iphone uitableview uinavigationcontroller scroll

我是一个工作的UINavigationController在堆栈上和堆栈外推送两个不同的UITableView。除滚动外,我的所有功能都正常工作。当任一表格在顶行上方滚动或在底行下方滚动时,它会保持在那里暴露表格上方/下方的边距。我正在寻找桌子“弹回”,以便只有桌子可见而不是超出白色空间区域 - 就像任何其他iPhone应用程序一样。

我的一个UITableViews由NIB加载,另一个以编程方式创建 - 两者都具有完全相同的结果。我已尝试过Nib中的所有弹跳和滚动设置,但似乎没有任何效果。

有人能告诉我我做错了什么吗?如果我能详细说明我的问题,请告诉我。

谢谢,

-Scott

我想添加更多信息,因为我仍然无法弄清楚这个问题。我应该指出,我试图添加此NavigationController的应用程序不是主视图。我有一个使用Nib加载的SettingsViewController。在该控制器中,我想要创建一个新的基于导航的视图集。所以从我的SettingsViewController里面,如果用户点击一个按钮,我......

在我的按钮选择器中:


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];

上面的代码在滚动之外的各个方面都非常有效。我能够处理所有委托方法并将新控制器推送到堆栈。我遇到的唯一问题是根控制器(以及推送的所有其他控制器)将无法正确滚动。

在每种情况下,它都允许我滚过桌子的顶部和底部,并且不会像它应该的那样快速回弹。当你轻弹滚动时,它也没有自由轮的感觉。相反,无论您滚动多快,它都会在您移开手指后立即停止。很奇怪。

我尝试使用导航模板创建另一个项目 - 当然它工作正常 - 但模板假设NavigationController的视图始终附加 - 这不是我的情况。我正在标准的ViewController中动态创建所有这些。

感谢Kevin的帮助,但我仍然在这里寻求帮助。

谢谢,

4 个答案:

答案 0 :(得分:2)

好吧,我解决了这个问题,它与我如何将UITableView添加到UINavigationController或我是如何实例化视图无关。事实证明这与任何一个完全无关。

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


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

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

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

...谢谢

答案 1 :(得分:0)

您的UITableViewUIScrollView,其属性bounces是关键。这是reference。不过,默认情况下它是YES。你看过这个吗?

答案 2 :(得分:0)

您的问题和评论似乎表明,除了推送UITableView之外,您正以某种方式将UINavigationController附加到UITableViewController。如果你不这样做,你真的应该。

通常,如果您可以将子视图控制器推送到UINavigationController,那么您也可以单独使用子视图控制器来测试它。尝试将UITableViewController的视图设置为窗口的根视图,看看它是否符合您的预期。这样,您可以将问题隔离到表格视图部分或导航部分。

答案 3 :(得分:0)

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

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

看起来像DefaultMode是错误的等待,我改变了我的代码等待UITrackingRunLoopMode并且TableView正常工作。就我而言,我用过:

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

一切正常。