【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 }
以上です