如何在应用程序中检索小部件尺寸以对其进行预览,具体取决于设备?

问题描述

我目前正在制作一个基于SwiftUI的仅窗口小部件应用程序,该应用程序允许用户显示某些类型的信息,例如时间,日期等。 为了使我的应用程序正常运行,我想在应用程序视图中预览小部件,并允许用户对其进行设置。

现在一切正常,我可以在应用程序中选择一个小部件并进行设置,以便该小部件也可以更新。 但是,我遇到了一个问题,经过一些研究,我似乎找不到找到一种方法来允许您根据所使用的设备来获取小部件的大小。

我尝试使用UIScreen.main.bounds.size,但是小部件尺寸和设备尺寸之间的宽高比不同。

我想做的是使我的小部件预览适应设备实际使用的小部件尺寸。 (换句话说,根据您使用的设备来检索小部件的大小)

是否有任何解决方案可以动态地执行此操作,或者需要为每个设备进行查看?预先感谢。

解决方法

您可以从Apple文档中将UIScreen.main.bounds.size映射到小部件尺寸: enter image description here https://developer.apple.com/design/human-interface-guidelines/ios/system-capabilities/widgets/

小型窗口小部件的示例:

func smallWidgetWidth() -> CGFloat {
    switch UIScreen.main.bounds.size {
    case CGSize(width: 414,height: 896):
        return 169
    case CGSize(width: 375,height: 812):
        return 155
    case CGSize(width: 414,height: 736):
        return 159
    case CGSize(width: 375,height: 667):
        return 148
    case CGSize(width: 320,height: 568):
        return 141
    default:
        return 155
    }
}
,

您可以使用 displaySize of TimelineProviderContext 来获取当前 Widget 的大小。

func getTimeline(in context: Context,completion: @escaping (Timeline<Item>) -> Void) {
    print(context.displaySize)
    ...
}

您可以在您的 Widget Provider 中找到它。