× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 |
rowHeightiOS8からは、セルの高さの計算方法が変わったらしい。ストーリーボードでtableViewにrowHeightが指定できるが、 実行時には値が-1になっている。 これは UITableViewAutomaticDimension という定数値で、セル高さを自動計算する設定ということだ。 viewDidLoadで
という感じで設定すれば良い。 そうすると他のコード中でもrowHeightが使えるようになり、 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath; をオーバーライドしなくてもよくなる。 セル高さが常に同じなら、tableView:heightForRowAtIndexPath: を実装するより、rowHeightを定義したほうが早い。と思う。 他に estimatedRowHeight というプロパティもある。 詳しくは テーブルビューの中身のサイズテーブルビューはスクロールビューでもある。つまり、UITableViewはUIScrollViewの子クラスである。 だから、UIScrollViewで使えるプロパティやメソッドはUITableViewでも使える。 ストーリーボードでも設定項目がちゃんとある。 だから、テーブルビューのセルとセクションを含めた中身全体のサイズは、
で取得することができる。heightForRowAtIndexPath とか heightForHeaderInSection とかのメソッドを使う必要は無い。 追加・削除アニメーションと中身のサイズinsertRowsAtIndexPaths: withRowAnimation:で追加するとき、contentSizeは 追加前の値のままである。 アニメーションが終わったとき、追加後のサイズになる。 deleteRowsAtIndexPaths: withRowAnimation: も同様。 追加・削除指定の注意セルの追加や削除をするとき、データソースの変更とセルの変更を一緒に行う。基本的にデータソースが先である。
当然だが、データソースに追加するindexと、セル位置を指定するrowAtIndexは整合が取れていないといけない。つまり tableView: cellForRowAtIndexPath: が返す物と同じであること。 追加・削除しても、当該のセル以外は再描画しないで位置だけ移動する。 行の削除、セクションの削除行・セクションを削除するメソッドは
となる。 注意点 deleteRows の結果、セクション内の行が0行になると実行時エラーになる。 0行になるときは、 deleteSections を実行すること。(deleteRowsは実行しないこと) PR |
|