-1 xcode objective-c ios iphone-x
我正在尝试为 iPhone X 调整我的应用程序的大小,但遇到了问题。目前我像这样定义屏幕尺寸:
#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)
Run Code Online (Sandbox Code Playgroud)
并根据电话类型进行约束。(是的,我知道不是最佳的,但它是我所做的)
当您使用 iPhone X 模拟器时,出于某种原因,它会像 iPhone 6 一样读取屏幕高度和宽度。
然后我搜索了 stack overflox 并发现了这个: 如何在 iOS 上获取设备品牌和型号?
唯一的问题是,当您在 iPhone X 模拟器上运行时,它返回 x86-64 而不是设备类型!
我显然没有 iPhone X,所以我如何检测这是 iPhone X 模拟器而不是 iPhone 6(基于屏幕尺寸),以便我可以对这款新手机进行适当的限制!
谢谢你们!
func modelIdentifier() -> String {
if let simulatorModelIdentifier = ProcessInfo().environment["SIMULATOR_MODEL_IDENTIFIER"] { return simulatorModelIdentifier }
var sysinfo = utsname()
uname(&sysinfo) // ignore return value
return String(bytes: Data(bytes: &sysinfo.machine, count: Int(_SYS_NAMELEN)), encoding: .ascii)!.trimmingCharacters(in: .controlCharacters)
}
Run Code Online (Sandbox Code Playgroud)
从这里
目标-c:
- (NSString *)modelIdentifier {
NSString *simulatorModelIdentifier = [NSProcessInfo processInfo].environment[@"SIMULATOR_MODEL_IDENTIFIER"];
NSLog(@"%@",simulatorModelIdentifier);
if (simulatorModelIdentifier) {
return simulatorModelIdentifier;
}
struct utsname sysInfo;
uname(&sysInfo);
return [NSString stringWithCString:sysInfo.machine encoding:NSUTF8StringEncoding];
Run Code Online (Sandbox Code Playgroud)
}
不要忘记:
#import <sys/utsname.h>
Run Code Online (Sandbox Code Playgroud)
使用:(以 viewDidLoad 为例):
NSString *model = [self modelIdentifier];
NSLog(@"Device: %@", model);
Run Code Online (Sandbox Code Playgroud)
如果型号为 iPhone10,3,则为 iPhone X。
| 归档时间: |
|
| 查看次数: |
1071 次 |
| 最近记录: |