切换到iOS 7后,UITableView不会滚动

Fau*_*les 5 iphone uitableview quickdialog ios7

在iOS 6中,我在我的应用程序中UITableView创建了一个使用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); 
 }
Run Code Online (Sandbox Code Playgroud)

iOS 7中此块的输出是

Content height: 0.000000
Content height: 836.000000
Content height: 0.000000
Run Code Online (Sandbox Code Playgroud)

同时,这个块在iOS 6(模拟器)中的输出是

Content height: 836.000000
Content height: 836.000000
Content height: 836.000000
Run Code Online (Sandbox Code Playgroud)

另外,为了尝试诊断问题,我设置了一个可以触发的按钮[self.quickDialogTableView reloadData].每当按下该按钮时,滚动行为开始正常运行.然后,当我离开视图并返回时,滚动再次失败(直到按下按钮).需要明确的是,我试图把reloadDataviewWillAppear本身(即除去在上面的代码块的最后两行)和它不能解决滚动.

我正在寻找解决问题的线索.在此先感谢您的帮助.

Fau*_*les 7

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

我创建了一个属性trueContentSize,在那里我存储了正确的大小.

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

然后,-viewDidLayoutSubviews我在contentSize手动纠正.

-(void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];
    self.quickDialogTableView.contentSize = self.trueContentSize; 
}
Run Code Online (Sandbox Code Playgroud)