iOS 8의 새로운 기능으로, 예상 행 높이를 설정하기 만하면 100 % 동적 표보기 셀을 얻은 다음 자동 레이아웃을 사용하여 셀의 요소를 레이아웃 할 수 있습니다. 콘텐츠의 높이가 증가하면 셀의 높이도 증가합니다. 이것은 매우 유용하며 테이블 뷰의 섹션 헤더에 대해 동일한 기능을 수행 할 수 있는지 궁금합니다.
예를 들어 UIView
in tableView:viewForHeaderInSection:
을 만들고, UILabel
하위보기를 추가하고 ,보기에 대한 레이블에 대한 자동 레이아웃 제한을 지정하고, 구현하지 않고도 레이블의 내용에 맞게보기 높이를 늘릴 수 tableView:heightForHeaderInSection:
있습니까?
viewForHeaderInSection
상태에 대한 문서 : “이 메서드는 tableView : heightForHeaderInSection :도 구현 된 경우에만 올바르게 작동합니다.” iOS 8에서 변경된 사항이 있는지 듣지 못했습니다.
그렇게 할 수 없다면이 행동을 모방하는 가장 좋은 방법은 무엇입니까?
답변
이것은 가능하다. iOS 8에서 구현 된 동적 셀 높이와 함께 바로 새로운 기능입니다.
아주 간단합니다. 이것을 추가하십시오 viewDidLoad
:
self.tableView.sectionHeaderHeight = UITableViewAutomaticDimension;
self.tableView.estimatedSectionHeaderHeight = 25;
그런 다음 viewForHeaderInSection
자동 레이아웃을 재정의 하고 사용하여보기의 요소를 적합하게 제한합니다. 그게 다야! 구현할 필요가 없습니다 heightForHeaderInSection
. 그리고 실제로는 sectionHeaderHeight
명시 할 필요가 없습니다. 명확성을 위해 추가했습니다.
iOS 11에서 셀 및 머리글 / 바닥 글보기는 기본적으로 예상 높이를 사용합니다. 해야 할 유일한 일은 예상되는 것을 시스템에 더 잘 알릴 수 있도록 예상 높이를 제공하는 것입니다. 기본값은 UITableViewAutomaticDimension
이지만 가능한 경우 평균 높이 인 더 나은 추정치를 제공해야합니다.
답변
이는 estimatedSectionHeaderHeight
테이블보기에서 를 설정 (또는 리턴)하여 수행 할 수 있습니다 .
을 설정 한 후 섹션 헤더가 셀과 겹치는 경우을estimatedSectionHeaderHeight
사용하고 있는지 확인하세요 estimatedRowHeight
.
(두 번째 단락에는 일부가 놓칠 수있는 모든 주석을 읽은 후 찾을 수있는 문제에 대한 답변이 포함되어 있기 때문에이 답변을 추가합니다.)
답변
대리자에 고정 높이를 제공하지 않는 한 헤더가 높이가 0이 될 때까지 동일한 문제가 발생했습니다 heighForHeaderInSection
.
다음을 포함하는 많은 솔루션을 시도했습니다.
self.tableView.sectionHeaderHeight = UITableView.automaticDimension
self.tableView.estimatedSectionHeaderHeight = 73
그러나 아무것도 작동하지 않았습니다. 내 셀도 적절한 자동 레이아웃을 사용하고있었습니다. 행은 다음 코드를 사용하여 동적으로 높이를 변경했지만 섹션 헤더는 변경되지 않았습니다.
self.tableView.estimatedRowHeight = 135
self.tableView.rowHeight = UITableView.automaticDimension
수정도 매우 간단하고 이상한하지만 난 대신 1 개 라인 코드의 대리자 메서드를 구현했다 estimatedSectionHeaderHeight
하고 sectionHeaderHeight
있는가는이 같은 내 경우에 다음과 같습니다.
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
UITableView.automaticDimension
}
func tableView(_ tableView: UITableView, estimatedHeightForHeaderInSection section: Int) -> CGFloat {
73
}
답변
Swift 4+
작동 (100 % 테스트)
콘텐츠에 따라 동적 높이가있는 행과 섹션이 모두 필요한 경우 아래 코드를 사용할 수 있습니다.
viewDidLoad ()에서 다음 줄을 작성하십시오.
self.globalTableView.estimatedRowHeight = 20
self.globalTableView.rowHeight = UITableView.automaticDimension
self.globalTableView.sectionHeaderHeight = UITableView.automaticDimension
self.globalTableView.estimatedSectionHeaderHeight = 25;
이제 UITableView Delegate 메서드를 사용하여 행 높이와 섹션 높이를 설정했습니다.
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
{
return UITableView.automaticDimension
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return UITableView.automaticDimension
}
답변
나는 시도했다
self.tableView.sectionHeaderHeight = UITableViewAutomaticDimension;
self.tableView.estimatedSectionHeaderHeight = 25;
그러나 여러 줄 레이블로 헤더 크기가 올바르게 조정되지 않았습니다. 내 문제를 해결하기 위해 이것을 추가했습니다.
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// Recalculates height
tableView.beginUpdates()
tableView.endUpdates()
}
답변
나의 경우에는:
- 프로그래밍 방식으로 설정이 작동하지 않습니다 .
self.tableView.sectionHeaderHeight = UITableViewAutomaticDimension
.
-
스토리 보드에서 설정이 작동하지 않습니다 .
-
오버라이드가
heightForHeaderInSection
작동했습니다 .
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return UITableViewAutomaticDimension }
테스트 환경 :
- 맥 OS 10.13.4
- XCode 버전 9.4.1
- 시뮬레이터 iPhone 8 Plus
답변
예, 저에게 효과적입니다. 다음과 같이 더 많이 변경해야합니다.
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let label = UILabel()
label.numberOfLines = 0
label.text = my own text
return label
}