我为我的应用程序开发了 Today Extension。安装并点击“显示更多”按钮后,小部件不会展开(但按钮从“显示更多”变为“更少显示”。再次点击时,“显示更少”变为“显示更多”。小部件大小不会改变,因为它之前没有扩展)。在第一次尝试扩展和收缩小部件之后,“显示更多”按钮工作正常。
我正在使用一个名为“list”的 swift 数组,并在扩展模式下计算小部件的高度作为 list.count * 60
因为我希望小部件扩展并在其表 View 中准确显示那些多行作为列表中的项目数。
我调试并发现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
}
但是然后在小部件的表格 View 中有额外的空行,这是我不想要的。
这是负责在我的项目中更改小部件模式的整个功能
func widgetActiveDisplayModeDidChange(_ activeDisplayMode: NCWidgetDisplayMode, withMaximumSize maxSize: CGSize) {
if activeDisplayMode == .expanded {
preferredContentSize = CGSize(width: maxSize.width, height: list.count * 60)
} else {
preferredContentSize = maxSize
}
}
预期的行为是:
第一次点击“显示更多”时,小部件应该展开,并在其表 View 中准确显示这些行作为列表中的项目数。
最佳答案
你可以这样做:
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)
}
}
当你更新你的列表时,关键是你只能在扩展时设置你喜欢的内容大小,否则当你第一次尝试扩展时会出现一些错误。
关于ios - 今天扩展 "Show More"按钮第一次不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57422869/