每隔一段时间,我的iPhone应用程序似乎就会崩溃,因为在iPad上运行它的用户。
最近,我在globalinit上发现了一份崩溃报告,指出了这种枚举类型的初始化,该枚举类型被大量用于设计和大小。
static var iPhone = IPhone(height: UIScreen.main.bounds.height)!
似乎iPad设备不会匹配这些高度中的任何一个,因此nil使应用程序崩溃(这是带有iOS 11的iPad Air(。在模拟器上,所有iPad设备在运行仅限iPhone的应用程序时似乎都对应于现有的iPhone尺寸。
enum IPhone: String {
case SE, normal, plus, X, XSMax
init?(height: CGFloat) {
switch height {
case 568: self = .SE
case 667: self = .normal
case 736: self = .plus
case 812: self = .X
case 896: self = .XSMax
default:
return nil
}
}
}
当然,我永远不想返回 nil,而是合并可能的 iPad 屏幕尺寸,这引出了一个问题:iPad 在运行我的应用程序时"模拟"了哪部 iPhone?我最近读到,从iOS 12开始,iPad将不再以3/4格式显示iPhone应用程序,而是以16/9格式显示。哪种是处理此问题的最佳方法,以便运行此应用程序的任何iPad都将对应于我现有的设计之一?
下面的参考资料告诉我们,在iOS 12之后,所有仅限iPhone的应用程序都将在具有iPhone 6分辨率的iPad上运行。将您的默认值更改为self = .normal
,我认为您会很高兴。
https://ioshacker.com/ipad/ios-12-improves-experience-of-using-iphone-apps-on-ipad