【swift】ios9でUITableViewCellの罫線を左端まで引っ張る方法メモ
はじめに
UITableViewのデフォルトだと、セル間の罫線が画面左から少し離れたところからスタートしているんですね。
今回やりたかったことはこれを画面の左端からスタートさせることです
実装
で、検索するとこの辺に答えっぽいのがあったのですが、自分のアプリではなんかうまく動かなくて、、、
// iOS 7
UITableView.appearance().separatorStyle = .SingleLine
UITableView.appearance().separatorInset = UIEdgeInsetsZero
UITableViewCell.appearance().separatorInset = UIEdgeInsetsZero
// iOS 8
if #available(iOS 8.0, *) {
UITableView.appearance().layoutMargins = UIEdgeInsetsZero
UITableViewCell.appearance().layoutMargins = UIEdgeInsetsZero
UITableViewCell.appearance().preservesSuperviewLayoutMargins = false
}
// iOS 9
if #available(iOS 9.0, *) {
UITableView.appearance().cellLayoutMarginsFollowReadableWidth = false
}全体に適用させるサンプルとして上記のようなコードをどこかで見たのですが、これもなぜか動かず、、、
で、なんか、UITableView.appearance()、UITableViewCell.appearance()の部分がios9で動いてなさそうということを発見しました。
ios8だと期待通りに動いてくれるのですが、、、
ちゃんと調べ切れていませんが、ちょっと面倒だけど以下のような処理をViewControllerごとに呼び出したらとりあえず動きました。
func setTableViewAppearance(tableView: UITableView) {
// iOS 7
tableView.separatorStyle = .SingleLine
tableView.separatorInset = UIEdgeInsetsZero
// iOS 8
if #available(iOS 8.0, *) {
tableView.layoutMargins = UIEdgeInsetsZero
}
// iOS 9
if #available(iOS 9.0, *) {
tableView.cellLayoutMarginsFollowReadableWidth = false
}
}
func setTableViewCellAppearance(cell: UITableViewCell) {
// iOS 7
cell.separatorInset = UIEdgeInsetsZero
// iOS 8
if #available(iOS 8.0, *) {
cell.layoutMargins = UIEdgeInsetsZero
cell.preservesSuperviewLayoutMargins = false
}
}呼び出し元
// UITa leViewにセット
setTableViewAppearance(tableView)
・・・
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)
// UITableViewCellにセット
self.setTableViewCellAppearance(cell)
return cell
}以上です