I have some strange issue with UITableView
only in iOS 7.
UITableViewCellSeparator
disappears above the first row and below the last row. Sometimes after selecting the rows or some scrolling actions it appears.
In my case tableView
is loaded from the Storyboard
with UITableViewStylePlain
style. The problem is surely not in UITableViewCellSeparatorStyle
, which is not changed from default UITableViewCellSeparatorStyleSingleLine
.
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.
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).