切换到iOS 7后,UITableView无法滚动



在iOS 6中,我在应用程序中使用QuickDialog创建了一个UITableView。它正常滚动。当我切换到iOS 7时,相同的UITableView无法正确滚动。我可以拖动到底部(滚动条压缩(,但是当我释放时,它会弹出到顶部。我一直在玩viewDidAppear来尝试诊断问题。请参阅下面的代码块。

-(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    NSLog(@"Content height: %f",self.quickDialogTableView.contentSize.height);
    [self.quickDialogTableView reloadData];
    NSLog(@"Content height: %f",self.quickDialogTableView.contentSize.height);
    [self.quickDialogTableView layoutIfNeeded];
    NSLog(@"Content height: %f",self.quickDialogTableView.contentSize.height); 
 }

iOS 7 中此块的输出为

Content height: 0.000000
Content height: 836.000000
Content height: 0.000000

同时,iOS 6(模拟器(中此块的输出为

Content height: 836.000000
Content height: 836.000000
Content height: 836.000000

同样为了尝试诊断问题,我设置了一个可以触发[self.quickDialogTableView reloadData]的按钮。每当按下该按钮时,滚动行为都会开始正常运行。然后,当我离开视图并返回时,滚动再次失败(直到按下按钮(。需要明确的是,我试图将reloadData本身放入viewWillAppear(即删除上面代码块中的最后两行(,但它不会纠正滚动。

正在寻找有关我可能在哪里寻求纠正问题的线索。提前感谢任何帮助。

好的

,所以我无法找出问题的根源,但我确实找到了希望对其他人有所帮助的解决方法。或者至少,也许可以帮助其他人指出真正的问题所在。

我创建了一个名为trueContentSize的属性,用于存储正确的大小。

-(void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    [self.quickDialogTableView reloadData]; // Calculates correct contentSize
    self.trueContentSize = self.quickDialogTableView.contentSize; 
}

然后,在-viewDidLayoutSubviews中,我手动更正contentSize

-(void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];
    self.quickDialogTableView.contentSize = self.trueContentSize; 
}

只是想我可能会在这里投入我的两分钱..

同样的问题也发生在我身上。表一开始加载正常,但导航到其他屏幕,返回,表视图的contentSize 0,0且不可滚动。Fausto的解决方法也不可靠。

事实证明,对我来说只是在-viewWillLayoutSubviews中引用topLayoutGuide的行为.这样做会导致上述所有症状。在新项目中试用一下:

  1. 在选项卡控制器内设置表视图控制器。
  2. 给它 30 行,只有静态内容。
  3. 运行,您可以滚动。切换选项卡,然后返回,您可以滚动。
  4. -viewWillLayoutSubviews中添加NSLog(@"%@", self.topLayoutGuide);
  5. 再次运行,您可以滚动,但切换选项卡,不再滚动。

奇怪。听起来像一个iOS错误,或者你只是不应该在该方法中引用topLayoutGuide。删除对该属性的任何引用将解决此问题。

编辑:截至今年早些时候,苹果通过雷达报告证实这是一个iOS错误。在解决之前不要引用topLayoutGuide(无论何时,呵呵(。:)

这是我

当前的临时修复。有人想出真正的解决方法吗?

@interface UITableView (Extension)
@end
@implementation UITableView (Extension)
- (void)setContentSize:(CGSize)contentSize {
  if (contentSize.height != 0) {
    [super setContentSize:contentSize];
    NSLog(@"set content height %f", contentSize.height);
  } else {
    NSLog(@"set content size zero");
  }
}
@end

面临同样的问题,找到的唯一解决方案是重新加载表中的数据。希望有帮助。

我也有类似的问题。我的问题是我在情节提要中为表视图设置了明确的高度。通过设置与上方/下方视图的距离来更新我的表格视图以使用自动布局,这使它对我有用。

最新更新