※本記事は、旧ブログからの再掲です。

UITableViewに独自にviewを貼付けた場合のcell削除時の削除ボタンが隠れてしまう現象の対処法の備忘録です。

下図のように UITableView の cell に独自に view を貼付け、cell を削除できるように編集ボタンを設置しました。

tableview_del_1

削除しようとして左側の赤丸ボタンが表示された際には、
右にある青い view は押し出されほとんど見えなくなり、

tableview_del_2

右側に赤い deleteボタンが表示された際には、
deleteボタンが cell に貼付けた view の下に隠れてしまいました。

tableview_del_3

調べたところ、削除ボタンが表示される際には、
cell自身はリサイズしてdeleteボタンのためにスペースを作るが
私が貼付けたviewはリサイズしていないためとのことです。
なので、view の autoresizingMaskプロパティを適切に設定する必要があります。
(Storyboardでも設定可能)

黄色のタイトル用のviewは幅が短くなるように下記のように設定します。
titleView.autoresizingMask = UIViewAutoresizingFlexibleWidth;

緑色のviewも上記と同じ設定をします。

青色の view は cell がリサイズする際、右端にくっついて動いて欲しいので、下記のように設定します。
blueView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin;

※UIViewAutoresizingFlexibleWidth:親ビューに合わせて幅を自動調整
UIViewAutoresizingFlexibleLeftMargin:親ビューに合わせて左側マージンの伸縮を自動調整

上記の設定をすると下図のように左側に赤丸ボタンが表示された時にも
cellに貼付けたviewもリサイズされ、

tableview_del_4

deleteボタンが表示される時にも cellに貼付けた view も一緒にリサイズされるようになります。

tableview_del_5

<参考>
[Appleドキュメント] UIView Class Reference – UIViewAutoresizing


Comments are closed.