5

iOS 6 では、アプリでUITableViewusing を作成しました。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]。そのボタンが押されるたびに、スクロール動作が正常に機能し始めます。その後、ビューを離れて戻ってくると、スクロールは再び失敗します (ボタンが押されるまで)。reloadData明確にするために、 aを単独で挿入しようとしましたviewWillAppear(つまり、上記のコード ブロックの最後の 2 行を削除しました) が、スクロールが正しくなりません。

問題を修正するためにどこを見ればよいかについての手がかりを探しています。助けてくれてありがとう。

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

ここに 2 セントを投入できると思っただけです..

同じ問題が私に起こっていました。テーブルは最初は正常に読み込まれますが、別の画面に移動して戻ってくると、テーブル ビューcontentSize0,0スクロールできなくなります。ファウストの回避策も確実に機能していませんでした。

私に当てはまることが判明したのはtopLayoutGuide-viewWillLayoutSubviews. それを行うと、上記のすべての症状が発生します。新しいプロジェクトで試してみてください:

  1. タブ コントローラー内にテーブル ビュー コントローラーをセットアップします。
  2. 静的コンテンツのみで 30 行を指定します。
  3. 実行すると、スクロールできます。タブを切り替えてから戻ると、スクロールできます。
  4. アドインNSLog(@"%@", self.topLayoutGuide);_-viewWillLayoutSubviews
  5. もう一度実行すると、スクロールできますが、タブを切り替えるとスクロールしなくなります。

変。iOS のバグのように聞こえるかtopLayoutGuide、そのメソッドで参照するべきではありません。そのプロパティへの参照を削除すると、問題が修正されます。

編集:今年の初めの時点で、Apple は、私が作成した Radar レポートを介して、これが 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 に答える