我为我的应用开发了Today Extension。当安装并点击“显示更多”按钮时,小部件不会展开(但按钮从“显示更多”变为“显示较少”。再次单击时,“显示更少”变为“显示更多”。窗口小部件尺寸不会更改,因为它之前没有扩展。在第一次尝试扩展和收缩窗口小部件之后,“显示更多”按钮可以很好地工作。
我正在使用一个名为“ list”的快速数组,并以list.count * 60
的形式在扩展模式下计算窗口小部件的高度,因为我希望窗口小部件展开并在其表视图中准确显示许多行作为项目数列表。
我调试后发现
preferredContentSize = CGSize(width: maxSize.width, height: list.count * 60)
的值为CGSize(width: 359, height: 240)
(列表中只有4个项目,因此4*60 = 240
)。
当我尝试使用以下代码段时,“显示更多”按钮也第一次完全正常运行。
if activeDisplayMode == .expanded {
preferredContentSize = maxSize
} else {
preferredContentSize = maxSize
}
但是随后在小部件的表格视图中还有其他我不想要的空行。
这是负责更改项目中小部件模式的整个功能
func widgetActiveDisplayModeDidChange(_ activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize) {
if activeDisplayMode == .expanded {
preferredContentSize = CGSize(width: maxSize.width, height: list.count * 60)
} else {
preferredContentSize = maxSize
}
}
预期的行为是:
在第一次点击“显示更多”时,小部件应该展开,并在其表视图中准确显示那些行作为列表中的项目数。
答案 0 :(得分:0)
您可以执行以下操作:
if list.count ?? 0 < 2 {
extensionContext?.widgetLargestAvailableDisplayMode = .compact
} else {
extensionContext?.widgetLargestAvailableDisplayMode = .expanded
if self.extensionContext?.widgetActiveDisplayMode == NCWidgetDisplayMode.expanded {
let acturalExpandHeight = list.count * 60
preferredContentSize = CGSize(width: UIScreen.main.bounds.width, height: acturalExpandHeight)
}
}
当您更新列表时,关键点是您只能在扩展内容时设置首选内容的大小,否则在尝试首次扩展时会出现一些错误。