가변 길이의 동적 텍스트가 tableview 셀 레이블에 삽입됩니다. tableview 셀의 높이를 동적으로 크기 조정하기 위해 다음을 구현했습니다 viewDidLoad()
.
self.tableView.estimatedRowHeight = 88.0
self.tableView.rowHeight = UITableViewAutomaticDimension
이것은 아직 스크롤되지 않은 UITableViewAutomaticDimention
셀 (셀로 스크롤 할 때 호출 됨)에 대해 잘 작동 하지만 데이터가있는 테이블을로드 할 때 처음 화면에 렌더링되는 셀에는 적합하지 않습니다.
(다른 많은 리소스에서 제안한대로) 단순히 데이터를 다시로드 해 보았습니다.
self.tableView.reloadData()
viewDidAppear()
그리고 둘 다 viewWillAppear()
소용이 없었습니다. 나는 길을 잃었다 .. 누구든지 xcode가 화면에 처음로드 된 셀의 동적 높이를 렌더링하는 방법을 알고 있습니까?
더 나은 대체 방법이 있으면 알려주세요.
답변
이 시도:
func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
편집하다
func tableView(tableView: UITableView, estimatedHeightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
스위프트 4
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
스위프트 4.2
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableView.automaticDimension
}
두 방법 모두 위에 정의하십시오.
문제를 해결합니다.
PS :이 작업을 수행하려면 위쪽 및 아래쪽 제약 조건이 필요합니다.
답변
이것을 사용하십시오 :
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 300
사용하지 마십시오 : heightForRowAtIndexPath
델리게이트 함수
또한 스토리 보드에서 많은 양의 데이터가 포함 된 레이블의 높이를 설정하지 마십시오. top, bottom, leading, trailing
제약을 주세요 .
답변
SWIFT 3
tableView.rowHeight = UITableViewAutomaticDimension
tableView.estimatedRowHeight = 160
과!!! StoryBoard에서 : 레이블에 대해 TOP 및 BOTTOM 제약 조건을 설정해야합니다. 다른 건 없습니다.
답변
이 이상한 버그는 다른 답변으로 문제가 해결되지 않았기 때문에 Interface Builder 매개 변수를 통해 해결되었습니다.
내가 한 것은 기본 레이블 크기를 잠재적으로 콘텐츠가 될 수있는 것보다 크게 만들고 estimatedRowHeight
높이에도 반영되도록하는 것뿐 이었습니다. 이전에는 Interface Builder에서 기본 행 높이를로 설정하고 88px
컨트롤러에 반영했습니다 viewDidLoad()
.
self.tableView.rowHeight = UITableViewAutomaticDimension
self.tableView.estimatedRowHeight = 88.0
그러나 그것은 작동하지 않았습니다. 그래서 콘텐츠가 어쩌면 더 커지지 않을 것이라는 것을 깨달았 100px
으므로 기본 셀 높이를 108px
(잠재적 콘텐츠보다 큼)으로 설정하고 컨트롤러에 그렇게 반영했습니다 viewDidLoad()
.
self.tableView.rowHeight = UITableViewAutomaticDimension
self.tableView.estimatedRowHeight = 108.0
이것은 실제로 코드가 초기 레이블을 올바른 크기 로 축소 할 수있게했습니다 . 즉, 결코 더 큰 크기로 밖으로 확장 없지만, 항상 또한, 추가가 … 아래로 축소 할 수 self.tableView.reloadData()
필요하지 않았다 viewWillAppear()
.
나는 이것이 매우 가변적 인 콘텐츠 크기를 다루지 않는다는 것을 알고 있지만 콘텐츠가 가능한 최대 문자 수를 갖는 내 상황에서 작동했습니다.
이것이 Swift 또는 Interface Builder의 버그인지 확실하지 않지만 매력처럼 작동합니다. 시도 해봐!
답변
행 높이 및 예상 행 높이에 대한 자동 치수를 설정하고 다음 단계를 확인하십시오.
@IBOutlet weak var table: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
// Set automatic dimensions for row height
// Swift 4.2 onwards
table.rowHeight = UITableView.automaticDimension
table.estimatedRowHeight = UITableView.automaticDimension
// Swift 4.1 and below
table.rowHeight = UITableViewAutomaticDimension
table.estimatedRowHeight = UITableViewAutomaticDimension
}
// UITableViewAutomaticDimension calculates height of label contents/text
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
// Swift 4.2 onwards
return UITableView.automaticDimension
// Swift 4.1 and below
return UITableViewAutomaticDimension
}
예를 들어 : UITableviewCell에 레이블이있는 경우
- 줄 수 설정 = 0 (& 줄 바꿈 모드 = 꼬리 자르기)
- 수퍼 뷰 / 셀 컨테이너에 대한 모든 제약 (위, 아래, 오른쪽 왼쪽)을 설정합니다.
- 선택 사항 : 데이터가 없더라도 라벨로 덮는 최소 세로 영역을 원하는 경우 라벨의 최소 높이를 설정합니다.
다음은 동적 높이 제약이있는 샘플 라벨입니다.
답변
UITableView의 동적 크기 조정 셀에는 2 가지가 필요합니다.
- 테이블 뷰 셀 내에서 뷰의 올바른 제약 조건 설정 (대부분 뷰에 적절한 top, bottom 및 traling 제약 조건을 제공하는 것이 포함됨)
-
viewDidLoad ()에서 TableView의 이러한 속성 호출
tableView.rowHeight = UITableViewAutomaticDimension tableView.estimatedRowHeight = 140
이것은 swift 3로 작성된 자체 크기 조정 (동적 테이블 뷰 셀)에 대한 멋진 튜토리얼입니다.
답변
Swift 3의 경우 다음을 사용할 수 있습니다.
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}
func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
return UITableViewAutomaticDimension
}