Ich habe ein Today Widget, das die bevorstehenden Zugabfahrten basierend auf einem Paar von Stationen in der Hauptanwendung ausgewählt anzeigt. Da sich die Abfahrtszeiten mit der Zeit ändern, habe ich einen API-Aufruf unter viewWillAppear
, um die neuen Zeiten abzurufen und die Zellen einer tableView neu zu füllen.Einstellen der Höhe von Heute App Erweiterung
Momentan beginnt das Widget mit einer Höhe von 150-200 Punkten. Meine Aktualisierungslogik versucht, die preferredContent
Höhe einzustellen, aber das funktioniert nicht. Ich habe die TableView auf die oberen/unteren Layout Guides beschränkt. Ich habe versucht, die Rahmenhöhe des TableView auf die Hauptansicht zurückzusetzen, nachdem ich ihm einen neuen preferredContent gegeben habe.
Vermutlich geschieht der Rückruf von meinem Netzwerk nach viewWillAppear, so rufe ich layoutIfNeeded
viewDidLayoutSubviews
auszulösen, wo ich die Tableview laden.
Nichts davon bekommt mich, was ich sehen will. Eine Tabellenansicht mit den Abfahrtszeiten, die N times the height of a cell
ist, wobei N die Anzahl der Abfahrtszeiten ist, die zuletzt von meinem API-Aufruf abgerufen wurden.
Was fehlt mir? Jede Hilfe würde sehr geschätzt werden.
EDIT:
Dies ist der entsprechende Code, wo ich versuche, die Erweiterung neu Höhe.
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()
}
Ich habe viewDidLayoutSubviews
bemerkt genannt wird, nicht nach layoutIfNeeded
in den Abschluss-Handler aufgerufen wird. Obwohl dies möglicherweise nicht das Problem ist, ändert sich die Hauptansicht der App-Erweiterung nicht, nachdem eine neue preferredContentSize
festgelegt wurde.
Könnten Sie Ihren Code zeigen? In einer Tabellenansicht kann das Widget nicht mithilfe von Integritätsbedingungen von innen nach außen skaliert werden, sodass Sie _preferredContentSize_ verwenden müssen. Kannst du, wie du das machst? – matt