UITableView
iOS 7에서만 이상한 문제가 있습니다.
UITableViewCellSeparator
첫 번째 행 위와 마지막 행 아래에서 사라집니다. 때때로 행이나 일부 스크롤 동작을 선택한 후 나타납니다.
내 경우 tableView
에는 Storyboard
with UITableViewStylePlain
스타일 에서로드됩니다 . 문제는 확실하지 않으며 UITableViewCellSeparatorStyle
기본값에서 변경되지 않습니다 UITableViewCellSeparatorStyleSingleLine
.
Apple Dev Forums ( here 및 here ) 에서 읽을 때 다른 사람들에게 그러한 문제가 있으며 몇 가지 해결 방법이 있습니다.
Workaround: disable the default selection and recreate the behaviour in a method
trigged by a tapGestureRecognizer.
그러나 나는 여전히 그런 분리기의 이상한 행동의 이유를 찾고 있습니다.
어떤 아이디어?
업데이트 : XCode 5.1 DP 및 iOS 7.1 베타에서 보았 듯이 Apple 은이 문제를 해결하려고했습니다. 이제 구분 기호는 때때로 새로 고친 후 마지막 행 아래에 필요에 따라 표시되지만 테이블 뷰 생성 후에는 표시되지 않습니다.
답변
영향을받는 셀의 하위 뷰 계층 구조를 덤프하고 _UITableViewCellSeparatorView
가 숨김으로 설정되어 있음을 발견했습니다 . 그것이 보이지 않는 것은 당연합니다!
나는 오버라이드 layoutSubviews
내에서 UITableViewCell
서브 지금은 분리가 확실하게 표시됩니다
목표 -C :
- (void)layoutSubviews {
[super layoutSubviews];
for (UIView *subview in self.contentView.superview.subviews) {
if ([NSStringFromClass(subview.class) hasSuffix:@"SeparatorView"]) {
subview.hidden = NO;
}
}
}
스위프트 :
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
}
}
}
여기에 제안 된 다른 솔루션은 나에게 일관되게 작동하지 않거나 어리석은 것처럼 보입니다 (맞춤형 1px 바닥 글보기 추가).
답변
이것은 나를 위해 일했다 :
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
// fix for separators bug in iOS 7
self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
self.tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
답변
또한 분리 누락 된 문제를했고 나는 때만 문제가 발생한 것을 발견 heightForRowAtIndexPath
한 소수의 개수를 돌려줍니다 . 해결책:
override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return ceil(yourHeight) // Ceiling this value fixes disappearing separators
}
답변
밝은 회색 배경색으로 테이블의 머리글과 바닥 글에 높이 1의 UIView를 추가하려고 했습니까? 기본적으로 첫 번째와 마지막 구분 기호를 조롱합니다.
답변
sam
이 대리자 메서드를 사용하여 문제를 해결했습니다. 이제 깜박 거리지 않습니다.
-(void)tableView:(UITableView *)tableView didHighlightRowAtIndexPath:(NSIndexPath *)indexPath {
// fix for separators bug in iOS 7
tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
}
-(void)tableView:(UITableView *)tableView didUnhighlightRowAtIndexPath:(NSIndexPath *)indexPath {
// fix for separators bug in iOS 7
tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
tableView.separatorStyle = UITableViewCellSeparatorStyleSingleLine;
}
답변
앱에서이 문제가 발생했습니다. 사용자가 셀을 선택하면 새 테이블보기가 탐색 컨트롤러 스택으로 푸시 된 다음 사용자가이를 제거 할 때 구분 기호가 누락되었습니다. 테이블 뷰 대리자 메소드 [self.tableView deselectRowAtIndexPath:indexPath animated:NO];
를 사용하여 해결했습니다 didSelectRowAtIndexPath
.
답변
필요한 경우 더 쉬운 해결 방법이 있습니다 (데이터가 다시로드되고 기본 애니메이션이 완료된 후 셀을 선택하고 선택 해제하십시오).
그냥 추가하십시오 :
[self.tableView selectRowAtIndexPath:indexPath animated:NO scrollPosition:UITableViewScrollPositionNone];
[self.tableView deselectRowAtIndexPath:indexPath animated:NO];