0

我是 iOS 编程的新手。我为 iPhone 视网膜 4 英寸做了一个应用程序。现在我想自定义我的代码,以便它在 iPhone 视网膜 3.5 英寸和 iPhone 5 上运行。

我尝试为self.view.frame.size.widthand创建一个 if 查询self.view.frame.size.height,但出现“不可分配”错误。

谁能告诉我如何指定在所有设备中很好地设置工作区的条件?如果可能的话,请给我所有这些设备的确切屏幕尺寸。

4

6 回答 6

2
You look at the device's screen size (in points) and from that surmise if it's an iPad or iPhone etc., and then use hard-coded values for the screen sizes.

Here's some code to get the screen size:

CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = screenRect.size.width;
CGFloat screenHeight = screenRect.size.height;

Be aware that width and height might be swapped, depending on device orientation.
于 2013-11-15T11:54:34.380 回答
2

你可以使用这个:

CGRect screenBound = [[UIScreen mainScreen] bounds];
CGSize screenSize = screenBound.size; 
CGFloat screenWidth = screenSize.width;
CGFloat screenHeight = screenSize.height;

参考资料: https ://developer.apple.com/library/ios/documentation/uikit/reference/UIScreen_Class/Reference/UIScreen.html

于 2013-11-15T10:58:45.470 回答
0

在支持文件夹中的 project-Prefix.pch 文件中使用此代码。

    #define IS_IPHONE_SIMULATOR ([[[UIDevice currentDevice]model] 
            isEqualToString : @"iPhone     Simulator"])
    #define IS_IPHONE ([[[UIDevice currentDevice]model] isEqualToString : @"iPhone"])
    #define IS_IPOD_TOUCH ([[[UIDevice currentDevice]model] isEqualToString : @"iPod     Touch"])
    #define IS_HEIGHT_GTE_568 [[UIScreen mainScreen ] bounds].size.height >= 568.0f
    #define ITS_IPHONE5 ( IS_HEIGHT_GTE_568 )

复制并粘贴此代码,然后在您的 .m 文件中通过我给您的第一个代码...不需要在 viewdidload 上写大小只写在这些婴儿床中

       if  (IS_IPAD)
            {

            }
          else if(IS_IPHONE)
             {

              if ([[UIScreen mainScreen] bounds].size.height == 568)
                {

                }
         else
                {

                }
             }
于 2013-11-15T11:44:19.880 回答
0

比较屏幕大小包括这个宏并在必要时使用它

    #define isPhone5 ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone && [UIScreen mainScreen].bounds.size.height == 568)


如果您只想比较屏幕尺寸,则将上述宏减少到


    #define isiPhone5  ([[UIScreen mainScreen] bounds].size.height == 568)?TRUE:FALSE


例如在您的.m文件 中

    #import "ViewController.h"

    #define isiPhone5  ([[UIScreen mainScreen] bounds].size.height == 568)?TRUE:FALSE //hear u put the macro and use it anywhere in this file

 @interface ViewController ()<FootballPlayerDelegate>//confirms to this delegate

 @end

 @implementation ViewController

 - (void)viewDidLoad
 {
     [super viewDidLoad];

     if(isiPhone5)
     {
        NSLog(@"I am 4inch screen");

     }
     else
     {
         NSLog(@"I am 3.5inch screen");
     }
     // Do any additional setup after loading the view, typically from a nib.
 }


于 2013-11-15T10:53:32.113 回答
0

试试这个在你的 .M 文件中:

-(void)viewWillAppear:(BOOL)animated
{

    [self willAnimateRotationToInterfaceOrientation:[UIApplication sharedApplication].statusBarOrientation duration:1.0];

    UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;

    if(orientation == UIInterfaceOrientationLandscapeRight || orientation == UIInterfaceOrientationLandscapeLeft)

    {
        [self setFrameForLeftAndRightOrientation];
    }

    else if(orientation == UIInterfaceOrientationPortrait )

    {
        [self setFrameForPortraitAndUpsideDownOrientation];
    }
}

- (void)willAnimateRotationToInterfaceOrientation:
(UIInterfaceOrientation)toInterfaceOrientation
                                         duration:(NSTimeInterval)duration
{
    if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight)

    {
        [self setFrameForLeftAndRightOrientation];
    }

    else if (toInterfaceOrientation == UIInterfaceOrientationPortrait)

    {
        [self setFrameForPortraitAndUpsideDownOrientation];
    }


}
-(void)setFrameForLeftAndRightOrientation
{

    if(IS_IPAD)

    {
        //Write here code for iPad (Landscape mode)
    }

  else if(IS_IPHONE)
    {

        if ([[UIScreen mainScreen] bounds].size.height == 568)
        {
            //Write code here for iPhone 5    (Landscape mode) 
        }
        else
        {
           //Write code here for iPhone(3.5 inch) (Landscape mode) 
        }
    }
}

-(void)setFrameForPortraitAndUpsideDownOrientation
{
    if(IS_IPAD)
    {

    }
    else if(IS_IPHONE)
    {

        if ([[UIScreen mainScreen] bounds].size.height == 568)
        {

        }
        else
        {

        }
    }

}
于 2013-11-15T11:04:21.617 回答
0
  #define IS_IPHONE_SIMULATOR ([[[UIDevice currentDevice]model] isEqualToString : @"iPhone     Simulator"])
  #define IS_IPHONE ([[[UIDevice currentDevice]model] isEqualToString : @"iPhone"])
  #define IS_IPOD_TOUCH ([[[UIDevice currentDevice]model] isEqualToString : @"iPod Touch"])
  #define IS_HEIGHT_GTE_568 [[UIScreen mainScreen ] bounds].size.height >= 568.0f
  #define ITS_IPHONE5 ( IS_HEIGHT_GTE_568 )



 if (ITS_IPHONE5)

 {

 }

 else

{

}
于 2013-11-15T11:18:30.490 回答