4

私は検索してきましたが、この問題の解決策を見つけることができません。私の現在のコードはReload section without reloading section headerに基づいています。

ユーザーがセルを押したときに、uitableview セルを拡大しようとしています。最初は 2 行のテキストに制限されている UILabel を持つ UITableViewCell サブクラスがあります。ユーザーが UILabel を押すと、UILabel の numberOfLines プロパティを 0 に設定して、必要な数の行に展開します。

これがtableView:didSelectRowAtIndexPathからの私のコードです:

if (((NSNumber *)expandedCells[indexPath.section]).boolValue)
{
     labelExpandingCell.cellLabel.numberOfLines = 10;
} else
{
     labelExpandingCell.cellLabel.numberOfLines = 3;
}
[UIView setAnimationsEnabled:NO];
[self.tableView beginUpdates];
[self.tableView setNeedsDisplay];
[self.tableView endUpdates];
[UIView setAnimationsEnabled:YES];

通常、UITableView の contentOffset.y == 0 の場合、これは正常に機能することがあります。通常、このコードを実行すると、テーブルビューは後方に 100 ピクセルほどジャンプします。このコードの実行前後のログの例を次に示します。

2016-03-25 14:57:08.549 TableViewTest[485:129926] 更新前のコンテンツ オフセット: 153.500000 2016-03-25 14:57:08.568 TableViewTest[485:129926] 更新後のコンテンツ オフセット: 136.500000

現在表示されているセルを展開すると、自動レイアウトによってテーブルビューが後方にジャンプするのはなぜですか?

4

2 に答える 2

1

UITableView を設定しましたか

tableView.rowHeight = UITableViewAutomaticDimension tableView.estimatedRowHeight = DEFAULT_ROW_HEIGHT

はいの場合は、UILabel 制約がセルに正しく適用されていることを確認してください。上記の 2 つのプロパティを設定すると、「estimatedHeightForRowAtIndexPath」メソッドの実装を回避できます。

于 2016-07-27T04:37:24.173 に答える