2014-10-23 5 views
0

Я пытался понять это за последние несколько дней, но продолжаю получать одинаковый размер экрана для iPhone 5,5 и 6.- -> Высота -1136 Ширина 640. Как я могу объяснить разницу между этими двумя устройствами? Это симулятор? Должен ли я работать на реальном устройстве, чтобы получить текущие размеры? Что я делаю неправильно? Я запускаю Xcode 6 на Yosemite и тестирую с помощью симулятора.Как сказать разницу между iPhone 5s/5 и 6 в симуляторе Xcode

float heightOfScreen = [[UIScreen mainScreen ] nativeBounds].size.height; 
    float widthOfScreen = [[UIScreen mainScreen ] nativeBounds].size.width; 
    CGSize size = CGSizeMake(widthOfScreen , heightOfScreen); 
    NSLog(@"Size: %@", NSStringFromCGSize(size)); 


    // Iphone 6 plus H-1704 W-960 
    // Iphone 6  H-1136 W-640 <--- (why are they the same) 
    // Iphone 5s  H-1136 W-640 <--- 
    // Iphone 4s  H-960 W-640 
+1

Обнаружение модели iPhone по размеру экрана - это всегда плохая идея. Фактически, обнаружение модели iPhone в целом не требуется (я не знаю, какой вариант использования для этого?). Возможно, [UIDeviceHardware] (https://gist.github.com/Jaybles/1323251) может вам помочь. –

+0

@FabioPoloni Некоторые компании используют эту информацию для статистического анализа и анализа. – KudoCC

+0

@ KudoCC В этом случае: идея обнаружения iPhone по своим размерам еще хуже. –

ответ

3

Каждый iPhone имеет различное внутреннее имя:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    size_t size; 
    sysctlbyname("hw.machine", NULL, &size, NULL, 0); 
    char *machine = malloc(size); 
    sysctlbyname("hw.machine", machine, &size, NULL, 0); 
    NSString *platform = [NSString stringWithCString:machine encoding:NSUTF8StringEncoding]; 
    NSLog(@"iPhone Device%@",[self platformType:platform]); 

    free(machine); 
} 


- (NSString *) platformType:(NSString *)platform 
{ 
    if ([platform isEqualToString:@"iPhone4,1"]) return @"iPhone 4S"; 
    if ([platform isEqualToString:@"iPhone5,1"]) return @"iPhone 5 (GSM)"; 
    if ([platform isEqualToString:@"iPhone5,2"]) return @"iPhone 5 (GSM+CDMA)"; 
    if ([platform isEqualToString:@"iPhone5,3"]) return @"iPhone 5c (GSM)"; 
    if ([platform isEqualToString:@"iPhone5,4"]) return @"iPhone 5c (GSM+CDMA)"; 
    if ([platform isEqualToString:@"iPhone6,1"]) return @"iPhone 5s (GSM)"; 
    if ([platform isEqualToString:@"iPhone6,2"]) return @"iPhone 5s (GSM+CDMA)"; 
    if ([platform isEqualToString:@"iPhone7,2"]) return @"iPhone 6"; 
    if ([platform isEqualToString:@"iPhone7,1"]) return @"iPhone 6 Plus"; 
    if ([platform isEqualToString:@"i386"])   return @"Simulator"; 
    if ([platform isEqualToString:@"x86_64"])  return @"Simulator"; 

    return platform; 
} 

И кстати iPhone 4, 5 и 6 все они имеют различные размеры экрана:

iPhone 4, 4S:  (640, 960) 
iPhone 5, 5C, 5S: (640, 1136) 
iPhone 6:   (750, 1334) 
iPhone 6 Plus:  (1080, 1920) 

Вы можете обратиться к этому вопросу : Identify new iPhone model on xcode (5, 5c, 5s)

+0

Привет, спасибо, но это не работает с симулятором. –

+2

Это потому, что симулятор имеет другое внутреннее имя (я обновил ответ для внутреннего имени симулятора). –

+0

Привет, Сантьяго, хотя, если вы работаете с симулятором, хорошо иметь возможность различать симуляторы. Этот ответ переполнения стека работал наилучшим образом для меня: http://stackoverflow.com/questions/25892207/how-to-specify-size-for-iphone-6-customized-edge-to-edge-image?lq=1 –

2

Глядя на this guide to iphone resolutions Я считаю, что вы используете свой симулятор в режиме масштабирования. Поэтому попробуйте отключить его:

  1. Запустите приложение iOS Settings.
  2. Прокрутите вниз и выберите Показать & Яркость.
  3. Выберите опцию «Просмотр» в разделе «Отобразить масштаб».
  4. Предварительный просмотр и выберите предпочтительную настройку.
+0

Где находится IOS Настройки приложения? –

+0

@GerardGrundy На домашнем экране ... –

+0

@Esse Я до сих пор не могу найти «Display & Brightness», вы можете отправить снимок экрана? –

 Смежные вопросы

  • Нет связанных вопросов^_^