Developing same UI for 3.5, 4.0 (updated 4.7 and 5.5) inches screens in Xcode 5.0.1 (updated xcode 6), no landscape, no iPad and no storyboard

后端 未结 5 745
生来不讨喜
生来不讨喜 2020-12-23 12:37
  1. I have developed app considering 3.5 inch with .xib files and not storyboard.
  2. I am unable to find any tutorial or guide which will help me in designing app si
相关标签:
5条回答
  • 2020-12-23 13:14

    SWIFT:

    if(DeviceType.IS_IPHONE_4_OR_LESS)
    {
    //DO THIS 
    }
    //*********************************************************************
        enum UIUserInterfaceIdiom : Int
        {
            case Unspecified
            case Phone
            case Pad
        }
    
        struct ScreenSize
        {
            static let SCREEN_WIDTH         = UIScreen.mainScreen().bounds.size.width
            static let SCREEN_HEIGHT        = UIScreen.mainScreen().bounds.size.height
            static let SCREEN_MAX_LENGTH    = max(ScreenSize.SCREEN_WIDTH, ScreenSize.SCREEN_HEIGHT)
            static let SCREEN_MIN_LENGTH    = min(ScreenSize.SCREEN_WIDTH, ScreenSize.SCREEN_HEIGHT)
        }
    
        struct DeviceType
        {
            static let IS_IPHONE_4_OR_LESS  = UIDevice.currentDevice().userInterfaceIdiom == .Phone && ScreenSize.SCREEN_MAX_LENGTH < 568.0
            static let IS_IPHONE_5          = UIDevice.currentDevice().userInterfaceIdiom == .Phone && ScreenSize.SCREEN_MAX_LENGTH == 568.0
            static let IS_IPHONE_6          = UIDevice.currentDevice().userInterfaceIdiom == .Phone && ScreenSize.SCREEN_MAX_LENGTH == 667.0
            static let IS_IPHONE_6P         = UIDevice.currentDevice().userInterfaceIdiom == .Phone && ScreenSize.SCREEN_MAX_LENGTH == 736.0
            static let IS_IPAD              = UIDevice.currentDevice().userInterfaceIdiom == .Pad && ScreenSize.SCREEN_MAX_LENGTH == 1024.0
        }
    
    0 讨论(0)
  • 2020-12-23 13:15

    You can use auto layout or code. In code you can use layoutSubviews method. Just check view height to discover is it a iPhone 3.5 or 4 inch and do your set up:

    -(void)layoutSubviews
    {
        if (self.view.bounds.size.height == 568)
        {
            [self.textField setFrame:CGRectMake(0, 0, 100, 30)];
            //... other setting for iPhone 4inch
        }
        else
        {
            [self.textField setFrame:CGRectMake(0, 0, 100, 30)];
            //... other setting for iPhone 3.5 inch
        }
    }
    
    0 讨论(0)
  • 2020-12-23 13:22

    If you want check it Programmatically :

    FOR 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
        }
      }
    }
    

    You can check like:

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

    For checking Retina (3.5/4 inch Screen) or Non-Retina

    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
    }
    

    Update:

    For checking All retina iPhone Programmatically:

    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)
          }
     }
    

    Also check this

    #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)
    

    may it will help you .

    Happy coding.

    0 讨论(0)
  • 2020-12-23 13:22

    Put below lines in prefix.pch

    #define IS_DEVICE_RUNNING_IOS_7_AND_ABOVE() ([[[UIDevice currentDevice] systemVersion] compare:@"7.0" options:NSNumericSearch] != NSOrderedAscending)
    #define iPhoneVersion ([[UIScreen mainScreen] bounds].size.height == 568 ? 5 : ([[UIScreen mainScreen] bounds].size.height == 480 ? 4 : ([[UIScreen mainScreen] bounds].size.height == 667 ? 6 : ([[UIScreen mainScreen] bounds].size.height == 736 ? 61 : 999))))
    

    Now in programming you can say...

    if (IS_DEVICE_RUNNING_IOS_7_AND_ABOVE()) {
        NSLog("This is iOS 7");
    } else {
        NSLog("This is iOS 6 or below");
    }
    
    
    if (iPhoneVersion==4) {
        NSLog("This is 3.5 inch iPhone - iPhone 4s or below");
    } else if (iPhoneVersion==5) {
        NSLog("This is 4 inch iPhone - iPhone 5 family");
    } else if (iPhoneVersion==6) {
        NSLog("This is 4.7 inch iPhone - iPhone 6");
    } else if (iPhoneVersion==61) {
        NSLog("This is 5.5 inch iPhone - iPhone 6 Plus.. The BIGGER");
    } else {
        NSLog("This is iPad");
    }
    
    0 讨论(0)
  • 2020-12-23 13:33

    you can also define globally.

    #define isIPHONE5 ([UIScreen mainScreen].bounds.size.height == 568.f)
    if(isIPHONE5){
    
    // iphone 5 screen
    
    }else{
    
    // iphone 3.5 screen
    
    }
    
    0 讨论(0)
提交回复
热议问题