我做了一些關於枚舉的研究,他們很好。它們使代碼更具可讀性,但大多數情況下它們允許編譯器幫助您鍵入並捕獲錯誤。 Xcode會自動完成你的設備類型,並會給你錯誤:如果你嘗試使用未定義的值,則使用未聲明的標識符。這裏的代碼被重寫爲一個枚舉。我用LF前綴了這些值,但是您應該使用適合您項目的內容。
這是我的頭文件
// Devices as of Fall 2014
typedef NS_ENUM(NSInteger, LFdeviceType) {
LFDeviceTypePhoneClassic,
LFDeviceTypePhoneRetina3_5,
LFDeviceTypePhoneRetina4,
LFDeviceTypePhone6,
LFDeviceTypePhone6Plus,
LFDeviceTypePadClassic,
LFDeviceTypePadRetina,
};
而且這是在我的.m文件。
m+ (NSInteger)deviceType {
CGSize screenSize = [[UIScreen mainScreen] bounds].size;
CGFloat deviceScale = [UIScreen mainScreen].scale;
LFdeviceType device = LFDeviceTypePhoneClassic;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
device = LFDeviceTypePhoneClassic; // Just in case it doesn't make it through the conditionals
// Classic has a resolution of 480 × 320
if((screenSize.height == 480 || screenSize.width == 480) && deviceScale == 1.0f) {
device = LFDeviceTypePhoneClassic;
// Retina has a resolution of 960 × 640
} else if((screenSize.height == 480 || screenSize.width == 480) && deviceScale == 2.0f) {
device = LFDeviceTypePhoneRetina3_5;
// Retina 4" has a resolution of 1136 x 640
} else if (screenSize.height == 568 || screenSize.width == 568) {
device = LFDeviceTypePhoneRetina4;
// iPhone 6 has a resolution of 1334 by 750
} else if (screenSize.height == 667 || screenSize.width == 667) {
device = LFDeviceTypePhone6;
// iPhone 6 Plus has an actual size of 2208 × 1242 and resolution of 1920 by 1080
// Reported size is 736 x 414
} else if (screenSize.height == 736 || screenSize.width == 736) {
device = LFDeviceTypePhone6Plus;
}
} else if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
device = LFDeviceTypePadClassic; // Just in case it doesn't make it through the conditionals
if(deviceScale == 1.0f) {
device = LFDeviceTypePadClassic;
} else if (deviceScale == 2.0f) {
device = LFDeviceTypePadRetina;
}
}
//NSLog(@"The device is %@ scale is %f and the height is %f and width is %f", device, deviceScale, screenSize.height, screenSize.width);
return device;
}
這樣稱呼它:
if (( [Utilities deviceType] == LFDeviceTypePhoneClassic
|| [Utilities deviceType] == LFDeviceTypePhoneRetina3_5) &&
numberOfFoilsOnScreen > 7) {
numberOfFoilsOnScreen = 7;
}
爲什麼你有多個xibs?只需使用一個用於所有設備(可能是iPad的第二個)。使用自動佈局和約束來正確地確定所有尺寸和位置。 – rmaddy 2014-10-16 15:45:52
我最初並沒有編寫代碼,只是希望解決它,所以它適用於那些有應用程序並使用iPhone 6/6 Plus的人,我可以擔心之後改進代碼,但這是一個更緊急的解決方法。 .. 感謝誰標記了這個答案也... – user3355723 2014-10-16 15:52:17
那麼你的問題是什麼?你想爲iPhone 6使用iPhone 5 xib嗎?還是你有另一個特定於iPhone 6的xib? – rmaddy 2014-10-16 15:53:58