Ios xCode如果定义iphone型号

Ios xCode如果定义iphone型号,ios,iphone,xcode,cgrectmake,Ios,Iphone,Xcode,Cgrectmake,在我在.m文件中使用的xcode项目中 #define embedRectIphone CGRectMake(0, 0, 320, 180) 这在早期版本中很好 但这应该是不同的,因为iPhone有很多尺寸,所以我需要类似的东西 .h文件看起来像: #import <UIKit/UIKit.h> @interface WebcamsDetailViewController : GAITrackedViewController <VideoPlayerDelegate>

在我在.m文件中使用的xcode项目中

#define embedRectIphone CGRectMake(0, 0, 320, 180)
这在早期版本中很好

但这应该是不同的,因为iPhone有很多尺寸,所以我需要类似的东西

.h文件看起来像:

#import <UIKit/UIKit.h>

@interface WebcamsDetailViewController : GAITrackedViewController <VideoPlayerDelegate> {

    VideoPlayerKit *videoPlayer;
    NSMutableArray *viewControllers;
    CGRect embedViewRect;

}

@end
    #import "WebcamsDetailViewController.h"
    #import "AppDelegate.h"
    #import "Webcam.h"

    #define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_RETINA ([[UIScreen mainScreen] scale] >= 2.0)

#define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width)
#define SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height)
#define SCREEN_MAX_LENGTH (MAX(SCREEN_WIDTH, SCREEN_HEIGHT))
#define SCREEN_MIN_LENGTH (MIN(SCREEN_WIDTH, SCREEN_HEIGHT))

#define IS_IPHONE_4_OR_LESS (IS_IPHONE && SCREEN_MAX_LENGTH < 568.0)
#define IS_IPHONE_5 (IS_IPHONE && SCREEN_MAX_LENGTH == 568.0)
#define IS_IPHONE_6 (IS_IPHONE && SCREEN_MAX_LENGTH == 667.0)
#define IS_IPHONE_6P (IS_IPHONE && SCREEN_MAX_LENGTH == 736.0)

#define embedRectIphone IS_IPHONE_6? CGRectMake(0, 0, 377, 210):CGRectMake(0, 0, 320, 180)

    #define embedRectIpad CGRectMake(0, 0, 768, 400)

    @interface WebcamsDetailViewController ()

    @end


    @implementation WebcamsDetailViewController

    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {

        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            embedViewRect = ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) ? embedRectIphone : embedRectIpad;
        }
        return self;

    }

    ...

    @end
它似乎在模拟器上不起作用。 那可能吗?我错了吗? 关于如何修复这个问题还有其他想法吗

在以下帮助之后,.m文件看起来像:

#import <UIKit/UIKit.h>

@interface WebcamsDetailViewController : GAITrackedViewController <VideoPlayerDelegate> {

    VideoPlayerKit *videoPlayer;
    NSMutableArray *viewControllers;
    CGRect embedViewRect;

}

@end
    #import "WebcamsDetailViewController.h"
    #import "AppDelegate.h"
    #import "Webcam.h"

    #define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_RETINA ([[UIScreen mainScreen] scale] >= 2.0)

#define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width)
#define SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height)
#define SCREEN_MAX_LENGTH (MAX(SCREEN_WIDTH, SCREEN_HEIGHT))
#define SCREEN_MIN_LENGTH (MIN(SCREEN_WIDTH, SCREEN_HEIGHT))

#define IS_IPHONE_4_OR_LESS (IS_IPHONE && SCREEN_MAX_LENGTH < 568.0)
#define IS_IPHONE_5 (IS_IPHONE && SCREEN_MAX_LENGTH == 568.0)
#define IS_IPHONE_6 (IS_IPHONE && SCREEN_MAX_LENGTH == 667.0)
#define IS_IPHONE_6P (IS_IPHONE && SCREEN_MAX_LENGTH == 736.0)

#define embedRectIphone IS_IPHONE_6? CGRectMake(0, 0, 377, 210):CGRectMake(0, 0, 320, 180)

    #define embedRectIpad CGRectMake(0, 0, 768, 400)

    @interface WebcamsDetailViewController ()

    @end


    @implementation WebcamsDetailViewController

    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {

        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            embedViewRect = ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) ? embedRectIphone : embedRectIpad;
        }
        return self;

    }

    ...

    @end
希望得到答案, 顺致敬意,
David

不要依赖这些目标设备IPHONE 6宏。像这样试试

#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define IS_RETINA ([[UIScreen mainScreen] scale] >= 2.0)

#define SCREEN_WIDTH ([[UIScreen mainScreen] bounds].size.width)
#define SCREEN_HEIGHT ([[UIScreen mainScreen] bounds].size.height)
#define SCREEN_MAX_LENGTH (MAX(SCREEN_WIDTH, SCREEN_HEIGHT))
#define SCREEN_MIN_LENGTH (MIN(SCREEN_WIDTH, SCREEN_HEIGHT))

#define IS_IPHONE_4_OR_LESS (IS_IPHONE && SCREEN_MAX_LENGTH < 568.0)
#define IS_IPHONE_5 (IS_IPHONE && SCREEN_MAX_LENGTH == 568.0)
#define IS_IPHONE_6 (IS_IPHONE && SCREEN_MAX_LENGTH == 667.0)
#define IS_IPHONE_6P (IS_IPHONE && SCREEN_MAX_LENGTH == 736.0)

这是完全错误的。这样做的话,使用define,你会得到一个可以在iPhone4上运行的应用程序,或者一个可以在iPhone5上运行的应用程序,或者一个可以在iPhone6上运行的应用程序,等等。你不会得到一个可以在所有东西上运行的应用程序。包括苹果明年发布的iPhone7+c


像你一样使用硬编码的矩形是很可怕的。您应该认真阅读NSLayoutConstraint之类的内容,以获得适用于任何地方的内容。看看Interface Builder为您提供了什么。只需构建一个在选择新项目时获得的示例程序;它们可以自动处理多个不同大小的设备,您也可以

请注意,您在那里所做的工作是在编译时进行评估的。所以,如果你希望在不同的设备上运行时有不同的大小,你需要做运行时检查。这个概念是完全错误的。检测实际设备必须在运行时进行,而不是在编译时进行;你也不应该硬编码任何尺寸。是的,我理解,但正如我所说的,我正在学习,还不是xCode专家,这是我在早期版本中找到的唯一方法来获得我必须做的事情,所有其他的都在iPhone 6的xibs基础上很好,但不是这个,我必须尽快发送应用程序。但我会努力研究你的方法/更好的方法,以备将来更新-是的,我理解你的观点,但我不是iOS专家。我在这里嵌入了一个自定义视频播放器,这是我在过去版本的应用程序中找到的唯一实现这一点的方法。我没有处理这个问题的xib元素。我是通过编程实现的,在iPhone6之前它工作得很好。谢谢你的努力,但当我尝试这样做时,我在刚刚编辑问题时添加的代码中调用视频播放器时出错。我得到-使用未声明的标识符'SCREEN_MAX_LENGTH.Ya,sry我忘了添加几行代码,我已经编辑了它。。试试吧,希望它现在能起作用!!再次感谢!!但我还是有同样的问题。我知道我没有完全正确地处理这个问题,但似乎很难仅仅说“嘿,我是iPhone X”-是否添加了以下行定义屏幕宽度[[UIScreen mainScreen]边界].size.WIDTH定义屏幕高度[[UIScreen mainScreen]边界].size.HEIGHT定义屏幕最大长度最大屏幕宽度,屏幕高度定义屏幕最小长度最小屏幕宽度,屏幕高度??如果是,那么就清理并重建你的应用程序。是的,我做了,清理后我也有同样的问题。