2017-10-11 3 views
1

iOS11でこのUITableViewグリッチを理解し解決するのにお手伝いできます。かなり簡単なテストケースで私の問題を再現することができました。iOS11 UITableview reloadRowsAtIndexPathsグリッチ

https://github.com/trapper-/iOS11-tableview-glitch

テーブルビューの下の方にリロードする細胞が再ロードセルが不気味にスクロールを開始しますと、他の細胞が移動し、周りのホップを開始するとき。

複数のセルをリロードするとかなり悪くなりますが、この単純な例を複雑にしたくありませんでした。

+0

は、問題を示し、最小限の関連するコードが含まれるようにあなたの質問を編集してください。 – rmaddy

+0

最小関連コードはgithubにリンクされています – trapper

+0

はい、わかっています。しかし、少なくともあなたのテーブルビューコードの関連部分をあなたの質問の実際のテキストとして表示する必要があります。 – rmaddy

答えて

2

このように使用すると、その動作。

- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    return 100; 
} 
+0

興味深いことは、細胞が100の高さを超えていない限り、役立つように見えます。そうであれば、不具合が戻ってきます。 'stringByPaddingToLength:100'に変更すると、問題が戻ってきます。 – trapper

+0

iOS 11では、デフォルトのテーブル行の高さは「自動」なので、estimatedHeightForRowまたはheightForRowを実装する必要があります。また、適切な値を返す必要があります。また、tableviews行の高さプロパティを明示的に設定して自動行の高さを無効にする必要があります。 – Paulw11

+0

完全に動的なコンテンツであれば、1行から20行まで何でも構いません。 – trapper

3

これは役立つはず:

[UIView performWithoutAnimation:^{ 
    [tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; 
}]; 
+0

と呼ばれています。これは私のために働いた - 受け入れられた答えでなければなりません – Bill

1

は、のviewDidLoadのテーブルビューに0にestimatedRowHeightを提供してください。わたしにはできる。

+0

それは自己サイジングテーブルセルを無効にするだけです。すべてのセルが1行になります。 – trapper

0

あなたは(viewDidLoadメソッドで)テーブルビューestimatedRowHeightしている設定してみてください:tableView.rowHeightはデフォルトでUITableViewAutomaticDimensionに設定されている self.tableView.estimatedRowHeight = 100;

いますが、アップルからestimatedRowHeight を設定する必要があります - 「有効にするにはセルフサイジングテーブルビューセルを使用する場合は、テーブルビューのrowHeightプロパティをUITableViewAutomaticDimensionに設定する必要がありますまた、estimatedRowHeightプロパティに値を割り当てる必要があります。これらのプロパティが両方とも設定されると、システムはAuto Layoutを使用して、 "

あなたがチェックアウトすることができます: https://developer.apple.com/library/content/documentation/UserExperience/Conceptual/AutolayoutPG/WorkingwithSelf-SizingTableViewCells.html

+0

これはセルフサイジングテーブルセルを無効にするだけです。すべてのセルが1行になります。 – trapper

+0

@trapper私はself.tableView.estimatedRowHeight = 100を追加しました。あなたのプロジェクトのviewControllerのviewDidLoadとあなたの問題を解決するようです。 あなたtableView.rowHeightがデフォルトでUITableViewAutomaticDimensionに設定されていますがappleからestimatedRowHeight を設定する必要がありますされています 「自己サイズテーブルビューセルを有効にするには、あなたがUITableViewAutomaticDimensionにテーブルビューのrowHeightのプロパティを設定する必要があります。また、割り当てる必要があります。 estimatedRowHeightプロパティの値これらのプロパティが両方設定されると、システムは自動レイアウトを使用して行の実際の高さを計算します。 –

+0

私のコメントの後、あなたの答えを編集し、それを完全に変更しました。 lol – trapper

関連する問題