답변:
를 사용 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:viewForHeaderInSection
A는 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:
호출되지 않습니다.
UITableViewAutomaticDimension
UITableViewHeaderFooterView
delegate 메소드로 채워진 표준 이 사용 된다고 가정합니다 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:
.
실험 후, 만든 헤더 에서이 줄 을 제거 하면 viewDidLoad
7.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:
구현?