Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/106.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios UITableView赢得';卷轴_Ios_Uitableview_Storyboard - Fatal编程技术网

Ios UITableView赢得';卷轴

Ios UITableView赢得';卷轴,ios,uitableview,storyboard,Ios,Uitableview,Storyboard,我的故事板中有一个UITableViewController,出于某种奇怪的原因,我无法让它滚动。请看这段视频,了解我的意思: 表中大约有40行,因此有大量信息可供显示。它的行为有点像框架真的很高,所以它能够显示所有的行,拖动的唯一运动是拉伸和反弹 我在-viewdide中添加了一些代码:检查框架,边界,内容大小和插入: - (void) viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; UIEdge

我的故事板中有一个
UITableViewController
,出于某种奇怪的原因,我无法让它滚动。请看这段视频,了解我的意思:

表中大约有40行,因此有大量信息可供显示。它的行为有点像框架真的很高,所以它能够显示所有的行,拖动的唯一运动是拉伸和反弹

我在
-viewdide中添加了一些代码:
检查
框架
边界
内容大小
插入

- (void) viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    UIEdgeInsets insets = self.tableView.contentInset;
    NSLog(@"top layout guide: %f", self.topLayoutGuide.length);
    NSLog(@"table insets: %@", NSStringFromUIEdgeInsets(insets));

    NSLog(@"frame: %@", NSStringFromCGRect(self.tableView.frame));
    NSLog(@"bounds: %@", NSStringFromCGRect(self.tableView.bounds));
    NSLog(@"contentSize: %@", NSStringFromCGSize(self.tableView.contentSize));

}
这是它打印出来的:

top layout guide: 64.000000
table insets: {64, 0, 0, 0}
frame: {{0, 0}, {320, 568}}
bounds: {{0, -64}, {320, 568}}
contentSize: {320, 1980}
因此,
contentSize
显示了它有很多要显示的内容,而
frame/bounds
显示了表格只有屏幕那么高,那么为什么它不能滚动呢

我试着从我的故事板中删除它,然后从头开始重新创建它,以防有什么东西被调整并导致问题,但在我在故事板中重建视图控制器之后,这种情况仍然发生

编辑:


我注意到当视图控制器第一次显示时,
滚动条
会闪烁,它们的长度大致正确,可以代表一个屏幕上的表格数据。我设置了一个循环,每隔几秒钟就在表上调用
-flashScrollIndicators
,当视图控制器被推到堆栈上时,它在初始闪烁后甚至不显示滚动条。

我花了这么多时间才发现AutoLayout是启用的,当它被禁用时,它开始滚动


那么,是否禁用了自动布局?

我认为您的问题在于自动布局。如果您使用的是AutoLayout,那么还应该提供一些约束,以便根据其superview正确调整其大小。 我认为您必须在TableView上提供宽度约束。以及其他约束,如与TopLayoutGuide和BottomLayoutGuide的垂直距离。 如果您使用的是Xcode 5.0或更高版本,那么Xcode将为您提供有关缺少约束或冲突约束的警告。 如果您不了解约束,请参阅。
关于自动布局约束的另一个很好的教程。

您可以尝试自动添加缺少的约束。在Xcode中使用编辑器->解决自动布局问题->添加缺少的约束。

我不知道这会导致问题,也许有人可以帮助我理解

我采用了常规的隔离策略,即注释掉大部分代码,直到问题消失,然后缩小范围,直到发现问题。这一切都归结于这一行代码:

NSLog(@"top layout guide: %f", self.topLayoutGuide.length);
有了这行代码,表拒绝滚动

没有这行代码,表的行为正常

演示问题的项目zip文件:


确保已启用滚动?是的,在序列图像板的tableview上已启用滚动。请尝试以编程方式进行设置。那是UITableViewController吗。?您为它添加了任何子类吗?尝试以编程方式设置它。是的,我有一个子类,因此我可以实现datasource方法。我正在使用NSFetchedResultsController来提取核心数据方法。我的项目中还有其他几个视图控制器,它们的显示/滚动都很好。是的,自动布局已启用(我的整个项目都需要启用它)。我的其他所有表视图都工作得很好,我不知道为什么这一个不同。是的,但已经尝试过了。我已将其删除,但问题仍然存在:/我在self.topLayoutGuide.length中遇到了类似的问题,如果在布局计算中使用它,推/弹出导航的工作非常奇怪,最后滚动消失。如果我将self.topLayoutGuide.length替换为常量(肖像为64),一切正常。