swift 有没有一种方法可以检测应用程序是“缩放以匹配iPad”还是“针对Mac优化”

ddrv8njm  于 5个月前  发布在  Swift
关注(0)|答案(2)|浏览(51)

有没有一种方法可以在运行时或编译时检测Mac Catalyst应用程序是否是“Scaled to Match iPad”还是“Optimize for Mac”。
条件编译块建议使用类似于targetEnvironment(macCatalyst)的方法在编译时无法获得此信息。
Build settings reference说这个信息在TARGETED_DEVICE_FAMILY Info.plist条目中,所以也许我可以在运行时从那里得到它。
此信息在ProcessInfo.processInfo.environment中不存在。

plupiseo

plupiseo1#

没有可用的编译时检查。如果你在编译Swift文件时查看构建日志,在两个设置之间传递给编译器的标志没有区别。
但是正如Choosing a user interface idiom for your Mac app中所描述的,有运行时检查。这涉及到从适当的trait集合或UIDevice userInterfaceIdiom中查看接口习惯用法。
当你构建为“为Mac优化”时,你会得到.mac习惯用法。当你构建为“扩展以匹配iPad”时,你会得到.ipad习惯用法。
链接文档中显示的示例如下:

let childViewController: UIViewController
if traitCollection.userInterfaceIdiom == .mac {
    childViewController = MacOptimizedChildViewController()
} else {
    childViewController = ChildViewController()
}

字符串
在某些情况下,您可能希望将此类代码 Package 在targetEnvironment(macCatalyst)的编译器检查中,以便iOS代码可以使用与Mac版本不同的选项。

nnvyjq4y

nnvyjq4y2#

我意识到了答案:

  • 如果“缩放以匹配iPad”,则UIDevice.current.userInterfaceIdiom == 1
  • 如果“Optimize for Mac”,则UIDevice.current.userInterfaceIdiom == 5

相关问题