B.S. B.S. - 1 year ago 264
iOS Question

UITableViewCell Separator disappearing in iOS7

I have some strange issue with

only in iOS 7.

disappears above the first row and below the last row. Sometimes after selecting the rows or some scrolling actions it appears.

In my case
is loaded from the
style. The problem is surely not in
, which is not changed from default

As I read at Apple Dev Forums (here and here) other people have such problem and some workarounds are found, for example:

Workaround: disable the default selection and recreate the behaviour in a method
trigged by a tapGestureRecognizer.

But I am still searching for the reason of such separator strange behaviour.

Any ideas?

Update: As I saw in XCode 5.1 DP and iOS 7.1 beta, Apple tried to fix this problem. Now separator is shown as needed sometimes below the last row, after some refreshing, but not after tableview creation.

Answer Source

I dumped the subview hierarchy of affected cells and found that the _UITableViewCellSeparatorView was set to hidden. No wonder it's not shown!

I overrode layoutSubviews in my UITableViewCell subclass and now the separators are displayed reliably:


- (void)layoutSubviews {
    [super layoutSubviews];

    for (UIView *subview in self.contentView.superview.subviews) {
        if ([NSStringFromClass(subview.class) hasSuffix:@"SeparatorView"]) {
            subview.hidden = NO;


override func layoutSubviews() {

    guard let superview = contentView.superview else {
    for subview in superview.subviews {
        if String(subview.dynamicType).hasSuffix("SeparatorView") {
            subview.hidden = false

The other solutions proposed here didn't work consistently for me or seem clunky (adding custom 1 px footer views).