【发布时间】:2016-10-11 03:28:33
【问题描述】:
我有一个 Today 小部件,它根据在主应用程序中选择的一对车站显示即将开出的火车。鉴于出发时间随时间变化,我在viewWillAppear 中有一个 API 调用来获取新时间并重新填充 tableView 的单元格。
目前,小部件的初始高度为 150-200 磅。我的更新逻辑尝试设置 preferredContent 高度,但这不起作用。我将 tableView 限制为顶部/底部布局指南。在告诉它一个新的preferredContent之后,我尝试将tableView的框架高度重置为主视图。
大概,我的网络的回调发生在 viewWillAppear 之后,所以我调用 layoutIfNeeded 来触发 viewDidLayoutSubviews 我重新加载 tableview。
这些都不能让我看到我想看到的东西。由 N times the height of a cell 的出发时间填充的表格视图,其中 N 是我的 API 调用最近获取的出发时间数。
我错过了什么?任何帮助将不胜感激。
编辑:
这是我尝试重新高度扩展的相关代码。
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()
}
我注意到在完成处理程序中调用layoutIfNeeded 之后,没有调用viewDidLayoutSubviews。虽然这可能不是问题,因为应用扩展主视图在设置新的preferredContentSize 后不会改变。
【问题讨论】:
-
你能展示你的代码吗?表格视图无法使用约束从内向外调整小部件的大小,因此您必须使用
preferredContentSize。你能做到吗?
标签: user-interface autolayout today-extension