UITableViewCell Separator disappearing in iOS7
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:
Objective-C:
- (void)layoutSubviews { [super layoutSubviews]; for (UIView *subview in self.contentView.superview.subviews) { if ([NSStringFromClass(subview.class) hasSuffix:@"SeparatorView"]) { subview.hidden = NO; } }}
Swift:
override func layoutSubviews() { super.layoutSubviews() guard let superview = contentView.superview else { return } 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).
This worked for me:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { // fix for separators bug in iOS 7 self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; self.tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
I also had the problem with missing separator and I found out that the problem only occured when heightForRowAtIndexPath
was returning a decimal number. Solution:
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { return ceil(yourHeight) // Ceiling this value fixes disappearing separators}