그룹화 된 스타일을 사용하는 테이블보기의 디자인이 iOS 7에서 크게 변경되었으므로 첫 번째 섹션 헤더를 숨기거나 제거하고 싶습니다. 지금까지 나는 그것을 달성하지 못했습니다.
약간 단순화 된 내 코드는 다음과 같습니다.
- (CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
if (section == 0)
return 0.0f;
return 32.0f;
}
- (UIView*) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
if (section == 0) {
UIView* view = [[UIView alloc] initWithFrame: CGRectMake(0.0f, 0.0f, 640.0f, 0.0f)];
return view;
}
return nil;
}
- (NSString*) tableView:(UITableView *) tableView titleForHeaderInSection:(NSInteger)section
{
if (section == 0) {
return nil;
} else {
// return some string here ...
}
}
높이 0을 반환하면 다른 두 메서드는 섹션 인덱스 0으로 호출되지 않습니다. 그러나 빈 섹션 헤더는 여전히 기본 높이로 그려집니다. (iOS 6에서는 두 메서드가 호출되지만 보이는 결과는 동일합니다.)
다른 값을 반환하면 섹션 헤더는 지정된 높이를 가져옵니다.
0.01을 반환하면 거의 맞습니다. 그러나 시뮬레이터에서 “Color Misaligned Images”를 켜면 모든 테이블 뷰 셀이 표시됩니다 (논리적 인 결과 인 것 같습니다).
질문 UITableView : 빈 섹션에서 헤더 숨기기에 대한 답변 은 일부 사람들이 섹션 헤더를 숨기는 데 성공했음을 나타내는 것 같습니다. 그러나 일반 스타일 (그룹화 된 스타일 대신)에 적용될 수 있습니다.
지금까지 가장 좋은 절충안은 높이 0.5를 반환하여 내비게이션 막대 아래에 약간 더 두꺼운 선을 만드는 것입니다. 그러나 누군가가 첫 번째 섹션 헤더를 완전히 숨길 수있는 방법을 알고 있다면 감사하겠습니다.
최신 정보
caglar 의 분석 ( https://stackoverflow.com/a/19056823/413337 ) 에 따르면 테이블보기가 탐색 컨트롤러에 포함 된 경우에만 문제가 발생합니다.
답변
나에게 합리적으로 깨끗한 해결 방법이 있습니다. 그래서 저는 제 질문에 답하고 있습니다.
첫 번째 섹션 헤더의 높이로 0이 작동하지 않기 때문에 1을 반환합니다. 그런 다음 contentInset 을 사용하여 해당 높이를 탐색 모음 아래에 숨 깁니다.
목표 -C :
- (CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
if (section == 0)
return 1.0f;
return 32.0f;
}
- (NSString*) tableView:(UITableView *) tableView titleForHeaderInSection:(NSInteger)section
{
if (section == 0) {
return nil;
} else {
// return some string here ...
}
}
- (void) viewDidLoad
{
[super viewDidLoad];
self.tableView.contentInset = UIEdgeInsetsMake(-1.0f, 0.0f, 0.0f, 0.0);
}
빠른:
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return section == 0 ? 1.0 : 32
}
override func viewDidLoad() {
super.viewDidLoad()
tableView.contentInset = UIEdgeInsets(top: -1, left: 0, bottom: 0, right: 0)
}
답변
UITableView (그룹화 된 스타일)에서 첫 번째 섹션 헤더를 숨기는 방법입니다.
Swift 3.0 및 Xcode 8.0 솔루션
-
TableView의 대리자는 heightForHeaderInSection 메서드를 구현해야합니다.
-
heightForHeaderInSection 메서드 내에서 최소 양수를 반환합니다. (0이 아닙니다!)
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { let headerHeight: CGFloat switch section { case 0: // hide the header headerHeight = CGFloat.leastNonzeroMagnitude default: headerHeight = 21 } return headerHeight }
답변
대답은 저와 제 팀에게 매우 재미 있었고 매력처럼 작동했습니다.
- Interface Builder에서 뷰 계층 구조의 다른 뷰 아래로 테이블 뷰를 이동하십시오.
이유:
이 첫 번째 뷰가 UITableView 인 경우 뷰 계층 구조의 첫 번째 뷰에 대해서만 이런 일이 발생 하는 것을 관찰했습니다 . 따라서 다른 모든 유사한 UITableView에는 첫 번째를 제외하고는이 성가신 섹션이 없습니다. UITableView를 뷰 계층 구조의 첫 번째 위치로 옮기려고 시도했으며 모든 것이 예상대로 작동했습니다.
답변
그룹화 된 유형 tableView에이 트릭을 사용하십시오.
viewDidLoad 메서드 에서 테이블보기에 대한 코드 아래에 붙여 넣기를 복사합니다 .
tableView.tableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0.0f, 0.0f, tableView.bounds.size.width, 0.01f)];
답변
이 방법은 괜찮습니다.
override func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
if section == 0 {
return CGFloat.min
}
return 25
}
override func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
if section == 0 {
return nil
}else {
...
}
}
답변
방금 코드를 복사하고 시도했습니다. 정상적으로 실행됩니다 (시뮬레이터에서 시도). 결과보기를 첨부했습니다. 그런 견해를 원 하시죠? 아니면 당신의 문제를 오해 했습니까?
답변
Swift3 : heightForHeaderInSection은 0에서 작동합니다. 헤더가 clipsToBounds로 설정되어 있는지 확인하기 만하면됩니다.
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 0
}
clipsToBounds를 설정하지 않으면 스크롤 할 때 숨겨진 헤더가 표시됩니다.
func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
guard let header = view as? UITableViewHeaderFooterView else { return }
header.clipsToBounds = true
}