【问题标题】:How to retrieve widget sizes in app to make a preview of it depending on the device?如何在应用程序中检索小部件大小以根据设备进行预览?
【发布时间】:2021-01-12 13:21:34
【问题描述】:

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

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

我尝试使用UIScreen.main.bounds.size,但小部件尺寸和设备尺寸之间的纵横比不一样。

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

是否有任何解决方案可以动态执行,或者我需要为每个设备创建视图?提前致谢。

【问题讨论】:

  • 不是真的,这个答案是关于支持多个小部件尺寸。我一直在寻找的是在应用程序中检索小部件大小,但谢谢。 Viktor 回答了我要找的东西

标签: ios swift swiftui widgetkit


【解决方案1】:

您可以将 UIScreen.main.bounds.size 映射到 Apple 文档中的小部件尺寸: https://developer.apple.com/design/human-interface-guidelines/widgets/overview/design/

小部件示例:

switch UIScreen.main.bounds.size {
    case CGSize(width: 428, height: 926):   return 170
    case CGSize(width: 414, height: 896):   return 169
    case CGSize(width: 414, height: 736):   return 159
    case CGSize(width: 390, height: 844):   return 158
    case CGSize(width: 375, height: 812):   return 155
    case CGSize(width: 375, height: 667):   return 148
    case CGSize(width: 360, height: 780):   return 155
    case CGSize(width: 320, height: 568):   return 141
    default:                                return 155
    }

【讨论】:

  • 这就是我所做的,我正在寻找的,谢谢你的回复。
【解决方案2】:

您可以使用displaySizeTimelineProviderContext 来获取当前Widget 的大小。

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

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

【讨论】:

    猜你喜欢
    • 2021-09-19
    • 1970-01-01
    • 2012-08-27
    • 2021-03-25
    • 1970-01-01
    • 2022-12-19
    • 2018-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多