5

在 iOS 6 中,我在我的应用程序中UITableView创建了 using QuickDialog。它正常滚动。当我切换到 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]. 每当按下该按钮时,滚动行为就会开始正常运行。然后当我离开视图并返回时,滚动再次失败(直到按下按钮)。为了清楚起见,我试图自己放入 a reloadDataviewWillAppear即,删除上面代码块中的最后两行)并且它不能更正滚动。

我正在寻找关于我可能会在哪里纠正问题的线索。提前感谢您的帮助。

4

5 回答 5

7

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

我创建了一个属性,称为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; 
}
于 2013-09-27T00:42:40.623 回答
3

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

同样的问题也发生在我身上。一开始表格加载很好,但导航到不同的屏幕,回来,表格视图contentSize0,0不可滚动的。Fausto 的解决方法也不能可靠地工作。

结果对我来说只是引用的topLayoutGuide行为-viewWillLayoutSubviews。这样做会导致上述所有症状。在一个新项目中尝试一下:

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

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

编辑:截至今年早些时候,Apple 通过我所做的雷达报告确认这是一个 iOS 错误。在解决之前不要参考topLayoutGuide(无论何时,嘿)。:)

于 2014-04-18T23:44:44.697 回答
1

这是我目前的临时修复。有人知道真正的解决方法吗?

@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
于 2013-12-02T03:47:52.997 回答
0

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

于 2013-09-27T09:47:00.397 回答
0

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

于 2016-02-11T22:16:14.263 回答