【问题标题】:In ios how to support multiple screen sizes programmatically在ios中如何以编程方式支持多种屏幕尺寸
【发布时间】:2014-01-02 08:14:01
【问题描述】:

在ios开发中有些场景我们必须通过编程方式创建接口或者需要根据一些条件生成接口。我想知道如何在不使用自动布局的情况下以编程方式支持多种屏幕尺寸。

【问题讨论】:

  • 您的应用是否适用于 iPad 和 iPhone?
  • @CharanGiri 仅限 iphone
  • 在应用委托中编写此方法 +(NSString *)yesButWhichDeviceIsIt 并在其他类中重用。由于您的应用仅适用于 iPhone,因此您只需要注意高度。这适用于 iPod,您也无需在此方法中添加任何其他条件

标签: ios objective-c


【解决方案1】:

您可以执行以下操作

 CGSize screenSize = [[UIScreen mainScreen] bounds].size;
if (UI_USER_INTERFACE_IDIOM()==UIUserInterfaceIdiomPhone) {
    if (screenSize.height > 480.0f)
    {
        //Do iphone5 Stuff here
    }
    else
    {
         //Do iphone classic Stuff here
    }
}
else
{
       //Do ipad Stuff here
}

【讨论】:

    【解决方案2】:

    你可以使用一些宏

    #define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    #define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
    #define IS_IPHONE_5 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 568.0f)
    #define IS_IPHONE_4 (IS_IPHONE && [[UIScreen mainScreen] bounds].size.height == 480.0f)
    #define IS_IOS7 ((floor(NSFoundationVersionNumber)>NSFoundationVersionNumber_iOS_6_1))
    #define IS_LANDSCAPE ([UIApplication sharedApplication].statusBarOrientation == UIInterfaceOrientationPortraitUpsideDown)
    #define IS_RETINA ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] && ([UIScreen mainScreen].scale == 2.0))
    

    将接口上方的所有宏放在 .h 中,并开始在您的 .m 文件中使用它

    您可以使用它签入您的任何视图控制器

    -(void)createControls{
       if(IS_IPHONE){
          //Do iphone stuff
       }
       else{
          //Do ipad stuff
       }
    }
    

    【讨论】:

    • 感谢您的回复,您能否告诉我,如果我现在在旋转设备时有一个位于设备顶部中心的图像视图,如何处理包括多种尺寸在内的问题。
    • 两个方向的开发都需要考虑很多因素。您可以完全使用 xib 自动布局掩码或约束来处理。但是在考虑编码时,它会非常复杂。希望你在谷歌搜索一些关于它的教程
    【解决方案3】:
    +(NSString *)yesButWhichDeviceIsIt
    {
        BOOL hasRetina = NO;
        if ([UIScreen instancesRespondToSelector:@selector(scale)]) {
            CGFloat scale = [[UIScreen mainScreen] scale];
            if (scale > 1.0) {
                hasRetina = YES;
            }
        }
        if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
            if (hasRetina) {
                return @"iPad retina";
            } else {
                return @"iPad";
            }
        } else {
            if (hasRetina) {
                if ([[UIScreen mainScreen] bounds].size.height == 568){
                    return @"iPhone5";
                }
                else
                {
                    return @"iPhone4s";
                }
            } else {
                return @"iPhone";
            }
        }
    }
    

    通过上面的方法你会得到设备类型,根据结果你可以编码:

    NSString *deviceTypeString=[self yesButWhichDeviceIsIt];
    if([deviceTypeString isEqualToString: @"iPhone5"])
    {
    
    }
    

    【讨论】:

      【解决方案4】:
      -(NSString *)whichiOSDevice
          {
              BOOL hasRetina = NO;
              if ([UIScreen instancesRespondToSelector:@selector(scale)]) {
                      CGFloat scale = [[UIScreen mainScreen] scale];
                     if (scale > 1.0) {
                          hasRetina = YES;
                         }
                   }
               if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
                      if (hasRetina) {
                           return @"iPad retina";
                          } else {
                         return @"iPad";
                         }
                       } else {
               if (hasRetina) {
                              if ([[UIScreen mainScreen] bounds].size.height == 568){
                                   return @"iPhone5";
                              }
                           else
                               {
                                 return @"iPhone4s";
                                }
                          } else {
                        return @"iPhone";
                       }
                     }
                }
      

      【讨论】:

        猜你喜欢
        • 2015-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-24
        相关资源
        最近更新 更多