Я создаю приложение, в котором я хочу внести ряд изменений в макет представления в зависимости от типа используемого iPhone. В частности, я хочу знать, имеет ли разрешение вертикального экрана 1136
(iPhone5) или 960
(iPhone4). Одна из вещей, которую я хочу сделать, - настроить высоту моего UITableViewCells в UITableView, чтобы никакие частичные ячейки отображались, когда приложение запущено на любом из телефонов.
Мой вопрос:, что лучший способ определить используемый тип аппаратного телефона, чтобы я мог внести соответствующие изменения в мой макет представления?
Ответ 1
Вы действительно должны использовать функции автозапуска, чтобы ваши представления соответствовали любому формату экрана.
Однако, если вы хотите узнать, является ли устройство iPhone 5 (т.е. имеет 1136 пикселей в высоту), вы можете использовать:
[ [ UIScreen mainScreen ] bounds ].size.height
Можно превратить в макрос.
Ответ 2
У меня нет iphone 5, но на другом телефоне этот код отлично работает:
NSMutableDictionary *devices = [[NSMutableDictionary alloc] init];
[devices setObject:@"simulator" forKey:@"i386"];
[devices setObject:@"iPod Touch" forKey:@"iPod1,1"];
[devices setObject:@"iPod Touch Second Generation" forKey:@"iPod2,1"];
[devices setObject:@"iPod Touch Third Generation" forKey:@"iPod3,1"];
[devices setObject:@"iPod Touch Fourth Generation" forKey:@"iPod4,1"];
[devices setObject:@"iPhone" forKey:@"iPhone1,1"];
[devices setObject:@"iPhone 3G" forKey:@"iPhone1,2"];
[devices setObject:@"iPhone 3GS" forKey:@"iPhone2,1"];
[devices setObject:@"iPad" forKey:@"iPad1,1"];
[devices setObject:@"iPad 2" forKey:@"iPad2,1"];
[devices setObject:@"iPhone 4" forKey:@"iPhone3,1"];
[devices setObject:@"iPhone 4S" forKey:@"iPhone4"];
[devices setObject:@"iPhone 5" forKey:@"iPhone5"];
- (NSString *) getDeviceModel
{
struct utsname systemInfo;
uname(&systemInfo);
return [devices objectForKey:[NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding]];
}
Не забудьте импортировать:
#import "sys/utsname.h"
Ответ 3
#define IS_IPHONE5 (([[UIScreen mainScreen] bounds].size.height-568)?NO:YES)
определите этот макрос в каком-то файле constant.h и используйте его где угодно, чтобы проверить
if(IS_IPHONE5)
{
// iphone 5
}
else
{
// earlier
}
Ответ 4
Из вашего вопроса, похоже, вы хотите исправить пользовательский интерфейс в зависимости от устройства и разрешения. В этом случае это нормально, и вы можете использовать приведенный ниже код для идентификации устройства. Но для вещей, не относящихся к пользовательскому интерфейсу, например, поиск возможностей устройства, присутствующих на одном устройстве, отсутствует в других, всегда рекомендуется проверить, присутствует ли эта возможность, а не какая модель устройства.
От Apple официальный форум. (требуется вход)
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone){
if ([[UIScreen mainScreen] respondsToSelector: @selector(scale)]) {
CGSize result = [[UIScreen mainScreen] bounds].size;
CGFloat scale = [UIScreen mainScreen].scale;
result = CGSizeMake(result.width * scale, result.height * scale);
if(result.height == 960){
NSLog(@"iphone 4, 4s retina resolution");
}
if(result.height == 1136){
NSLog(@"iphone 5 resolution");
}
}else{
NSLog(@"iphone standard resolution");
}
}else{
if ([[UIScreen mainScreen] respondsToSelector: @selector(scale)]) {
NSLog(@"ipad Retina resolution");
}else{
NSLog(@"ipad Standard resolution");
}
}
Ответ 5
Я проверял соотношение сторон. Не такой общий, как некоторые из других методов, но еще более гибкий для будущих устройств, чем проверка определенного разрешения.
// 0.563380 = 16x9 (iPhone 5)
// 0.666667 = 3x2 (iPhone 4S and previous)
CGFloat aspectRatio = [UIScreen mainScreen].bounds.size.width / [UIScreen mainScreen].bounds.size.height;
// Tall Screen
if (aspectRatio > 0.55 && aspectRatio < 0.57) {
// Tall screen stuff.
}
// Short Screen
} else if (aspectRatio > 0.64 && aspectRatio < 0.68) {
// Short screen stuff.
}
}