주 신청서에서 선택한 한 쌍의 스테이션을 기반으로 예정된 기차 출발을 표시하는 오늘 위젯이 있습니다. 출발 시간이 시간에 따라 변한다는 것을 감안할 때 viewWillAppear
에 API 호출을 사용하여 새로운 시간을 가져오고 tableView의 셀을 다시 채 웁니다.오늘 앱 확장의 높이 조절
현재 위젯은 높이가 150-200 포인트 인 모양으로 시작됩니다. 내 업데이트 논리가 preferredContent
높이로 설정하려고 시도하지만 작동하지 않습니다. 상단/하단 레이아웃 가이드에 제약이있는 tableView가 있습니다. 나는 새로운 preferredContent 그것을 말한 후 기본보기로 tableView의 프레임 높이 재설정 시도했다.
아마도 내 네트워크의 콜백은 viewWillAppear 이후에 발생하기 때문에 layoutIfNeeded
을 호출하여 viewDidLayoutSubviews
을 불러 와서 tableview를 다시로드합니다.
아무 것도보고 싶지 않습니다. 출발 시간으로 채워진 테이블 뷰는 N times the height of a cell
입니다. 여기서 N은 가장 최근에 API 호출에서 가져온 출발 시간 수입니다.
무엇이 누락 되었습니까? 어떤 도움이라도 대단히 감사하겠습니다.
편집 :
이 내가 확장을 높이 다시 시도 관련 코드입니다. layoutIfNeeded
이 완료 핸들러에서 호출 후
override func viewWillAppear(_ animated: Bool) {
dao.fetchTrips { (trips) in
self.tripsDataSource.dataStore = trips
let numTrips = trips?.count
let rowHeight = 44 // static
let h = numTrips! * rowHeight
self.preferredContentSize = CGSize(width: 0, height: h)
self.view.layoutIfNeeded()
}
}
override func viewDidLayoutSubviews() {
self.tableView.reloadData()
}
나는 호출되지 않습니다 viewDidLayoutSubviews
을 발견했습니다. 그게 문제가되지 않을 수도 있습니다, 왜냐하면 새로운 preferredContentSize
을 설정 한 후에 앱 - 확장 메인보기가 바뀌지 않기 때문입니다.
당신이 당신의 코드를 보여줄 수 있을까요? 테이블 뷰는 제약 조건을 사용하여 내부에서 위젯의 크기를 조절할 수 없으므로 반드시 preferredContentSize를 사용해야합니다. 당신은 그 일을 어떻게 할 수 있습니까? – matt