我开始在iOS Objective-C代码中使用UIView.safeAreaInsets
,但这仅适用于较新的Xcode / SDK版本。也就是说,在编译时,较旧的SDK将无法识别safeAreaInsets
属性。
我想保留与这些旧版本的兼容性。我被告知我能够以某种方式通过名称访问此safeAreaInsets
变量,从而避免编译时检查。
怎么做?
我尝试过选择器和valueForKey,但无法让它们正常工作。他们是错误的方法,或者我无法弄清楚语法。
答案 0 :(得分:0)
以下是保持代码与不同版本兼容的一些方法。我相信还有其他人。
respondsToSelector
是运行时检查,以查看对象是否响应某个选择器。也许这就是你要找的东西。不仅可用于区分不同的类版本,还可用于检测可选方法。
if ([self.view respondsToSelector:@selector(safeAreaInsets)]) {
NSLog(@"safeAreaInsets available");
} else {
NSLog(@"safeAreaInsets not available");
}
operatingSystemVersion
上提供的NSProcessInfo
。为操作系统版本提供三个NSInteger
。
NSOperatingSystemVersion version = [[NSProcessInfo processInfo] operatingSystemVersion];
NSLog(@"Version %d.%d.%d", (int)version.majorVersion, (int)version.minorVersion, (int)version.patchVersion);
@available
关键字(或者是宏或指令?)编译为运行代码的OS版本的运行时检查。从Xcode 9.0开始,此方法可用。
if (@available(iOS 11.0, *)) {
NSLog(@"iOS 11.0 or higher");
} else {
NSLog(@"below iOS 11.0");
}