답변:
를 사용 tableView:viewForHeaderInSection:하려면 구현해야합니다 tableView:heightForHeaderInSection:. 헤더에 적절한 0이 아닌 높이를 반환해야합니다. 또한 구현하지 않아야합니다 tableView:titleForHeaderInSection:. 둘 중 하나만 사용해야합니다 ( viewForHeader또는 titleForHeader).
numberOfSections.
titleForHeaderInSection:와 viewForHeaderInSection:후자에서 반환 된보기의 하위 클래스 UITableViewHeaderFooterView다음의가 textLabel.text자동으로의 모든 대문자 버전으로 설정되어있는 titleForHeaderInSection:문자열입니다. 이 동작을 방지하려면 titleForHeaderInSection:inherited 대신 사용자 정의 레이블을 구현 하거나 사용 하지 마십시오 textLabel.
트릭은 두 가지 방법에 속해 있다는 것이다 UITableView프로토콜 : tableView:titleForHeaderInSection:A는 UITableViewDataSource프로토콜있어서, 여기서이 tableView:viewForHeaderInSection속하는UITableViewDelegate .
그것의 의미는:
당신이 메소드를 구현하지만, 단지 자신을 할당하면
dataSource에 대한 UITableView당신의
tableView:viewForHeaderInSection구현은 무시됩니다.
tableView:viewForHeaderInSection우선 순위가 더 높습니다. 당신이 방법 모두를 구현하고 모두 자신을 할당하는 경우
dataSource와 delegate에 대한 UITableView, 당신은 섹션 헤더의 뷰를 반환하지만이
tableView:titleForHeaderInSection:무시됩니다.
나는 또한 제거를 시도했다 tableView:heightForHeaderInSection:; 그것은 잘 작동했으며 위의 절차에 영향을 미치지 않는 것 같습니다. 그러나 문서는 tableView:viewForHeaderInSection올바르게 작동 하는 데 필요하다고 말합니다 . 안전을 위해서도 이것을 구현하는 것이 현명합니다.
UITableViewDelegate에 self내가 그 생각 때문에, tableView:viewForHeaderInSectionA는 UITableViewDataSource방법. 감사합니다!
titleForHeader크기가 고유 한 크기 를 통해이를 달성 할 수 있습니다. 내장 크기는 글꼴 모음 및 크기를 기준으로 계산됩니다.
현실에서 : @rmaddy 두 번 규칙을 허위했다 tableView:viewForHeaderInSection:않습니다 하지 당신은 또한 구현하는 것이 필요 tableView:heightForHeaderInSection:하고, 또한 모두 전화를 완벽하게 괜찮 titleForHeader와 viewForHeader. 나는 기록에 대해서만 규칙을 올바르게 진술 할 것입니다.
규칙은 단순히 viewForHeader헤더에 높이를 지정하지 않으면 호출되지 않습니다. 세 가지 방법을 조합하여이 작업을 수행 할 수 있습니다.
구현 tableView:heightForHeaderInSection:.
테이블을 설정하십시오 sectionHeaderHeight.
호출하십시오 titleForHeader(그렇지 않으면 헤더에 기본 높이가없는 경우 기본 높이가 제공됩니다).
이러한 작업을 수행하지 않으면 헤더 viewForHeader가 없으며 호출되지 않습니다. 높이가 없으면 런타임에서 뷰의 크기를 조정하는 방법을 알지 못하므로 요청하지 않아도되기 때문입니다.
tableView:viewForHeaderInSection:: "이 방법 tableView:heightForHeaderInSection:은 구현 된 경우에만 올바르게 작동합니다 ."
titleForHeaderInSection와 viewForHeaderInSection? 테이블보기는 두 가지 중 하나만 호출합니다 (현재 우선하는 것을 잊어 버립니다).
viewForHeader 호출 됩니다 . 나는 이것이 일어 viewForHeader났는데 , 내 부름과 머리글은 언젠가는 아무런 변화도 없었지만 잘 보이지 않았다 . 그때 나는 최소한의 요구 사항이 무엇인지 알아 내기 위해 실험을 시작했습니다 viewForHeader. 그리고 지금은 알고 있습니다. 그리고 이제 당신도 그렇습니다.
기부 estimatedSectionHeaderHeight와 sectionHeaderHeight가치관으로 내 문제가 해결되었습니다. 예를 들어
self.tableView.estimatedSectionHeaderHeight = 100
self.tableView.sectionHeaderHeight = UITableViewAutomaticDimension
rmaddy의 대답에서 헤더보기를 숨기려고하고 "tableView : heightForHeaderInSection"에 대해 0.0f를 반환하고 높이를 0으로 설정했습니다. tableView:viewForHeaderInSection .
변경 후에서 return 1.0f행 return 0.0f에서 tableView:heightForHeaderInSection대리인 방법tableView:viewForHeaderInSection 참으로 불렸다.
"tableView : heightForHeaderInSection"을 사용하지 않고도 원하는 효과를 얻을 수 있습니다. 그러나 이것은 "tableView : heightForHeaderInSection"델리게이트 메소드 호출에 문제가있는 다른 사용자에게 유용 할 수 있습니다.
tableView:heightForHeaderInSection:헤더의 높이를> 0으로 구현 하고 설정 해야합니다 .
이 델리게이트 메소드는 메소드와 함께 진행됩니다 viewForHeaderInSection:.
이게 도움이 되길 바란다.
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section {
return 40;
}
tableView:heightForHeaderInSection:returns 구현이 있다면 UITableViewAutomaticDimension,tableView:viewForHeaderInSection: 호출되지 않습니다.
UITableViewAutomaticDimensionUITableViewHeaderFooterViewdelegate 메소드로 채워진 표준 이 사용 된다고 가정합니다 tableView:titleForHeaderInSection:.
의 의견에서 UITableView.h:
이에서 값 반환
tableView:heightForHeaderInSection:또는tableView:heightForFooterInSection:맞는 값에서 반환하는 높이 결과tableView:titleForHeaderInSection:또는tableView:titleForFooterInSection:제목 경우 것은 전무 없습니다.
estimatedSectionHeaderHeight어떤 값으로 설정 하면 tableView:viewForHeaderInSection(행의 자동 치수 작동 방식과 유사하게) 호출됩니다.
방금 iOS 7.1 용 헤더가 표시되지 않는 문제가 있었지만 8.1 및 8.4로 명시 적으로 테스트 한 이후 릴리스에서 제대로 작동합니다.
동일한 코드의 경우, 7.1했다 하지 포함하여 모든의 섹션 헤더 대리자 메서드 중 하나를 호출 : tableView:heightForHeaderInSection:및tableView:viewForHeaderInSection: .
실험 후, 만든 헤더 에서이 줄 을 제거 하면 viewDidLoad7.1로 다시 나타나고 테스트 한 다른 버전에는 영향을 미치지 않습니다.
// _Removing_ this line _fixed_ headers on 7.1
self.tableView.estimatedSectionHeaderHeight = 80;
… 따라서 적어도 7.1에 대해서는 어떤 종류의 갈등이있는 것 같습니다.
나에게도 같은 문제가 발생했지만 xCode 9 에서 자동 높이 계산 을 사용 하면서 위에서 언급 한 것처럼 명시적인 높이 값을 제공 할 수 없습니다. 몇 가지 실험 후에 솔루션을 얻었 으므로이 방법을 재정의해야합니다.
-(CGFloat)tableView:(UITableView *)tableView
estimatedHeightForHeaderInSection:(NSInteger)section
{
return 44.0f;
}
두 옵션을 모두 확인 했지만
애플이 말한 것처럼 스토리 보드 에서 여전히 이상한 오류가 발생합니다.
참고 :이 오류는 IOS-11 버전이 아닌 IOS-10 버전 에서만 나타납니다 . 아마도 xCode의 버그 일 것입니다. 감사
여기 내가 찾은 것 ( Swift 4 ) ( 다른 질문에 대한 이 의견 덕분에 )
titleForHeaderInSection을 사용하든 viewForHeaderInSection을 사용하든 테이블 뷰를 스크롤하고 새 셀을로드 할 때 호출되지 않았지만 headerView의 textLabel에 대해 선택한 글꼴은로드시 처음 표시 된 항목에만 나타납니다. , 테이블이 스크롤되지 않았습니다.
수정 사항은 willDisplayHeaderView입니다.
func tableView(_ tableView: UITableView, willDisplayHeaderView view: UIView, forSection section: Int) {
if let header = view as? UITableViewHeaderFooterView {
header.textLabel?.font = UIFont(name: yourFont, size: 42)
}
}
내 경우에는 다음 과 같이 UITableviewCell셀을 사용 하고 반환하는 헤더보기를 만들었습니다.viewForHeaderInSection
return cell
이것을 이것을
return cell.contentView
나를 위해 일했다.
Swift 2 프로젝트에서 다음 두 가지 메소드를 Swift 3 프로젝트로 잘라내어 붙여 넣었습니다. Swift 3에서는 이러한 메소드가 첫 번째 매개 변수 이름 앞에 "-"가 있어야하기 때문에 호출되지 않았습니다.
func tableView(tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 44.0
}
func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let headerView = tableView.dequeueReusableHeaderFooterView(withIdentifier: B2BTrolleyHeaderFooterView.reuseIdentifier) as! B2BTrolleyHeaderFooterView
return headerView
}
heightForHeaderInSection:구현?