У меня есть виджет Сегодня, который отображает предстоящие поезда, исходя из пары станций, выбранных в основном приложении. Учитывая, что время отправления меняется со временем, у меня есть вызов API в viewWillAppear
, получающий новое время и повторное заполнение ячеек таблицыView.Регулировка высоты расширения приложения Today
В настоящее время виджет начинается с высоты примерно 150-200 точек в высоту. Моя логика обновления пытается установить высоту preferredContent
, но это не сработает. У меня есть tableView, ограниченный верхними/нижними макетами. Я попытался сбросить высоту кадра tableView на главный вид, указав ему новый preferredContent.
Предположительно, обратный вызов моей сети происходит после просмотраWillAppear, поэтому я вызываю layoutIfNeeded
, чтобы вызвать viewDidLayoutSubviews
, где я перезаряжаю табличное представление.
Ничего из этого не дает мне того, что я хочу видеть. Таблица, заполненная временем вылета, которое составляет N times the height of a cell
, где N - это количество времени отправления, последнее из которых было вызвано моим вызовом API.
Что мне не хватает? Любая помощь будет принята с благодарностью.
EDIT:
Это соответствующий код, где я пытаюсь повторно ВЫСОТА расширение.
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
не вызывается после layoutIfNeeded
вызывается в обработчике завершения. Хотя это может и не быть проблемой, поскольку основной вид приложения расширения не изменяется после установки нового preferredContentSize
.
Не могли бы вы показать код? В представлении таблицы не может быть размер виджета изнутри с использованием ограничений, поэтому вы _must_ используете 'preferredContentSize'. Можете ли вы, как вы это делаете? – matt