18

I have implemented UITableView with coding. I have also set UITableViewCellSeparatorStyleNone. It is hiding for iOS8 and below but not hiding with iOS9 Beta.

stevekohls
  • 2,214
  • 23
  • 29
Piyush Hirpara
  • 1,279
  • 1
  • 11
  • 29

9 Answers9

30

Please set the separator style to None in layoutSubviews method.

When constraints-based layout is used the base implementation applies the constraints-based layout and setting separatorStyle to UITableViewCellSeparatorStyleNone in this method will hide the separator for you.

Dhvani Puar
  • 854
  • 9
  • 13
5

From my investigations, it's not iOS 9 at fault, but Xcode 7.0 beta 4.

If I build the app using Xcode 7.0 beta 4, then the cell separators are shown even when set to None in Interface Builder. If I build the same code with Xcode 6.4 or 7.0 beta 3, the separators are not shown.

You can explicitly call this in your ViewController as a workaround:

self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

(I guess ibtool may be at fault)

shim
  • 9,289
  • 12
  • 69
  • 108
Matthew
  • 1,363
  • 11
  • 21
5

I'm also facing the same issue. My workaround was just to set

tableView.separatorColor = UIColor.clearColor().

grim
  • 6,669
  • 11
  • 38
  • 57
Natanel
  • 1,706
  • 1
  • 18
  • 19
3

Solution from apple developer forum that worked for me:

You can remove the separators by set UITableViewCellSeparatorNone before every reloadData method (ios 9.1). I don't know why, but UITableView resets separatorStyle and separatorColor every tyme after the reloadData method is called.

f3n1kc
  • 2,087
  • 18
  • 18
  • Do you mean after or in each reloadData call? I had a similar experience where I had to add additional calls to set the separator and the background colors to get tables to appear correctly. – Fiid Sep 26 '15 at 15:33
2

Setting the separator style to .None didn't work for me, so I used the edge insets as a hack workaround

self.tableView.separatorInset.left = UIScreen.mainScreen().bounds.width
jnoor
  • 81
  • 3
2

Below code worked for me,

  override func layoutSubviews() {
     super.layoutSubviews()
     tableView.separatorStyle = .none 
   }
1

I had the same issue, worked fine on iOS 8 but show the separator in iOS9. I was setting the separator style to none already. The following resolved it for me

if ([cell respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]) {
        cell.preservesSuperviewLayoutMargins = NO;
    }
    cell.separatorInset = UIEdgeInsetsMake(0.f, 0.f, 0.f, cell.bounds.size.width);
    if([cell respondsToSelector:@selector(setLayoutMargins:)]) {
        cell.layoutMargins = UIEdgeInsetsZero;
    }

This basically squash the separator using the inset.

Zeev Vax
  • 914
  • 7
  • 13
0

This issue is quite annoying. And here is my solution:

override func didMoveToSuperview() {
    if self.superview != nil {
        self.tableView.separatorStyle = .None
    }
}

Set the separatorStyle again when view is added to its superview.

syshen
  • 397
  • 3
  • 13
0
myTableView.separatorStyle = UITableViewCellSeparatorStyleNone;

for Swift

myTableView.separatorStyle = UITableViewCellSeparatorStyle.None

in cellForRowAtIndexPath method will hide white lines in iOS 9 and later.

Nazik
  • 8,696
  • 27
  • 77
  • 123