iphone - 在 Xcode 5.0.1(更新的 Xcode 6)中为 3.5、4.0(更新的 4.7 和 5.5)英寸屏幕开发相同的 UI,无横向、无 iPad 和 Storyboard

标签 iphone ios7 ios6 xib

  1. 我开发的应用程序考虑的是 3.5 英寸的 .xib 文件,而不是 Storyboard。
  2. 我找不到任何教程或指南可以帮助我设计适用于所有屏幕的类似应用。
  3. 我使用的是 Xcode 5.0.1
  4. 我只开发没有自动布局的普通应用程序,并且仅适用于 iOS 6 和 iOS 7 (iPhone)。
  5. 下面是屏幕截图,它在不同屏幕上的差异。

    A. iPhone iOS 6 模拟器: IPhone iOS 6 simulator

    B. 3.5 英寸(Ios 6 和 Ios 7) 3.5 Inch (Ios 6 and Ios 7) C.4.0 英寸(Ios 6 和 Ios 7) 4.0 Inch (Ios 6 and Ios 7)

更新: 请更新以下答案以了解 4.7 和 5.5 英寸屏幕。 enter image description here

最佳答案

如果您想以编程方式检查它:

对于 swift

extension UIDevice {

 var iPhoneX: Bool {
    return UIScreen.main.nativeBounds.height == 2436
 }
 var iPhone: Bool {
    return UIDevice.current.userInterfaceIdiom == .phone
 }
 enum ScreenType: String {
    case iPhone4_4S = "iPhone 4 or iPhone 4S"
    case iPhones_5_5s_5c_SE = "iPhone 5, iPhone 5s, iPhone 5c or iPhone SE"
    case iPhones_6_6s_7_8 = "iPhone 6, iPhone 6S, iPhone 7 or iPhone 8"
    case iPhones_6Plus_6sPlus_7Plus_8Plus = "iPhone 6 Plus, iPhone 6S Plus, iPhone 7 Plus or iPhone 8 Plus"
    case iPhoneXR = "iPhone XR"
    case iPhoneX_iPhoneXS = "iPhone X,iPhoneXS"
    case iPhoneXSMax = "iPhoneXS Max"
    case unknown
 }

 var screenType: ScreenType {
    switch UIScreen.main.nativeBounds.height {
    case 960:
        return .iPhone4_4S
    case 1136:
        return .iPhones_5_5s_5c_SE
    case 1334:
        return .iPhones_6_6s_7_8
    case 1792:
        return .iPhoneXR
    case 1920, 2208:
        return .iPhones_6Plus_6sPlus_7Plus_8Plus
    case 2436:
        return .iPhoneX_iPhoneXS
    case 2688:
        return .iPhoneXSMax
    default:
        return .unknown
    }
  }
}

您可以检查如下:

print("screenType:", UIDevice.current.screenType.rawValue)

用于检查视网膜(3.5/4 英寸屏幕)或非视网膜

if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
    if ([[UIScreen mainScreen] scale] == 2.0) {
       if([UIScreen mainScreen].bounds.size.height == 568){
          // iPhone retina-4 inch
        } else{
         // iPhone retina-3.5 inch
        }
}
else {
    // not retina display
}

更新:

用于以编程方式检查所有视网膜 iPhone:

if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
      if ([[UIScreen mainScreen] scale] == 2.0) {

           if([UIScreen mainScreen].bounds.size.height == 667){
             // iPhone retina-4.7 inch(iPhone 6)
           } 
           else if([UIScreen mainScreen].bounds.size.height == 568){
             // iPhone retina-4 inch(iPhone 5 or 5s)
           } 
           else{
            // iPhone retina-3.5 inch(iPhone 4s)
          }
      }
      else if ([[UIScreen mainScreen] scale] == 3.0)
      {
           //if you want to detect the iPhone 6+ only 
           if([UIScreen mainScreen].bounds.size.height == 736.0){
              //iPhone retina-5.5 inch screen(iPhone 6 plus)
           }
           //iPhone retina-5.5 inch screen(iPhone 6 plus)
      }
 }

另请检查此

#define IS_IPHONE_5 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 568.0)
#define IS_IPHONE_6 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 667.0)
#define IS_IPHONE_6_PLUS (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 736.0)

希望对你有帮助。

祝你编码愉快。

关于iphone - 在 Xcode 5.0.1(更新的 Xcode 6)中为 3.5、4.0(更新的 4.7 和 5.5)英寸屏幕开发相同的 UI,无横向、无 iPad 和 Storyboard,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20489964/

相关文章:

iphone - 申请条件 :shouldRestoreApplicationState: function to be invoked

iphone - Facebook在ios6中获取用户信息:An active access token must be used to query

objective-c - Tapku 日历不显示

ios - Storyboard、Interface Builder 未加载 568h 图像

iPhone 应用程序更新等待开发者发布 - 发布和出现在商店之间需要多长时间?

iphone - 文本字段中仅允许使用字母

ios - 在 UIScrollView 上放置自定义图层

objective-c - 恢复 iOS7 之前的 UINavigationController pushViewController 动画

ios - UITabBar 在 iOS7 上更改一个 UITabBarItem 的背景颜色

iphone - 如何知道用户是否在应用商店对应用程序进行了评分