iOS8 から separatorInset だけだと区切り線が広がらない

こんにちは。iOS8 から SeparatorInsets をゼロにする方法が変わりました。今までの UITableViewseparatorInsetUIEdgeInsetsZero を入れるだけだと、iOS7 では効きますが、iOS8 では効かなくなりました。

1
tableView.separatorInset = UIEdgeInsetsZero

"図1"

iOS8 にも対応するには

iOS8 からは UIView に追加された layoutMargins というプロパティにも UIEdgeInsetsZero をセットする必要があります。ただこのプロパティ、iOS8 以降でしか利用できないプロパティなので、分岐が必要になります。。

1
2
tableView.layoutMargins = UIEdgeInsetsZero
cell.layoutMargins = UIEdgeInsetsZero

全体に適用する簡単な例

全体に適用するには UIAppearance を使うと便利です。iOS7 と iOS8 に対応したコードは次のように書けます。

1
2
3
4
5
6
7
8
let version = NSString(string: UIDevice.currentDevice().systemVersion).doubleValue

UITableView.appearance().separatorInset = UIEdgeInsetsZero
UITableViewCell.appearance().separatorInset = UIEdgeInsetsZero
if version >= 8 {
    UITableView.appearance().layoutMargins = UIEdgeInsetsZero
    UITableViewCell.appearance().layoutMargins = UIEdgeInsetsZero
}

"図2"