我为我的应用程序开发了 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/

10-17 03:15