我的故事板中有一个UITableViewController
,由于一些奇怪的原因,我无法滚动它。请看这个视频,看看我的意思:
该表中有40行,因此有足够的信息可供显示。它有点像框架真的很高,所以它能够显示所有的行,而拖动的唯一动作就是拉伸和反弹。
我在-viewDidAppear:
添加了一些代码来检查frame
,bounds
,contentSize
和insets
:
- (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
显示该表只有屏幕高,所以为什么这个能够滚动?
我尝试从我的故事板中删除它并从头开始重新创建它以防万一被调整并导致问题,但它仍然发生在我在故事板中重建该视图控制器之后。
修改
我注意到scrollbars
在首次显示视图控制器时闪烁,并且它们看起来大致相当于表示一个屏幕值表格数据的长度。我设置了一个循环,每隔几秒就会在桌子上调用-flashScrollIndicators
,当视图控制器被推入堆栈时,它在初始闪烁后甚至不显示滚动条。
答案 0 :(得分:1)
我不知道为什么这会导致问题,也许有人可以帮助我理解。
我经历了正常的隔离策略,即评论大部分代码,直到问题消失,然后缩小,直到找到问题为止。这一切都归结为这行代码:
NSLog(@"top layout guide: %f", self.topLayoutGuide.length);
使用该行代码,表格拒绝滚动。
如果没有这行代码,表就会正常运行。
项目zip文件,演示了这个问题:
http://www.inadaydevelopment.com/stackoverflow/TableScrollBug.zip
答案 1 :(得分:0)
我花了这么多时间才发现AutoLayout已启用,当它被禁用时,我开始滚动
那么,AutoLayout是否被禁用了?
答案 2 :(得分:0)
我认为你的问题出在AutoLayout上。如果您正在使用AutoLayout,那么您还应该提供一些约束来根据它的超级视图正确调整它的大小。 我认为你必须在TableView上提供宽度约束。和其他约束,如与TopLayoutGuide和BottomLayoutGuide的垂直距离。 如果您使用Xcode 5.0或更新版本,那么Xcode将为您提供有关缺少约束或冲突约束的警告。 如果您不了解约束,请参阅this。 另一个关于AutoLayout约束的好教程this。
答案 3 :(得分:0)
您可以尝试自动添加缺失的约束。在Xcode中使用Editor - >解决自动布局问题 - >添加缺失约束。