可能重复:
检查iPhone iOS版本
我试过这段代码:
#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_2_2)
NSLog(@"iPhone 4.2");
#endif
Run Code Online (Sandbox Code Playgroud)
但是当我在模拟器4.1上再次运行它时,我仍然在控制台中获得日志"iPhone 4.2".
谢谢你的帮助.
董道
当我尝试在故事板中将标签的首选宽度设置为自动时,我收到以下错误:
属性不可用:自动首选最大布局宽度在8.0之前的iOS版本上不可用
由于我需要我的布局适用于iOS 7和8,我计划执行以下操作:
1和2很容易.我该如何做第3步?我可以设置它吗?
这是我到目前为止所尝试的...
如果您在故事板上将值设置为自动并进行检查preferredMaxLayoutWidth,您将看到它是0.
但是,尝试将其设置为0,即使它表示已经为0,也不能正常工作(例如标签保持为单行).例如,我尝试在故事板中将值设置为自动,然后viewDidLoad运行以下命令:
self.label.preferredMaxLayoutWidth = self.label.preferredMaxLayoutWidth;
Run Code Online (Sandbox Code Playgroud)
当我不运行上面的代码时,标签的大小正确.但是,当我运行上面的代码(它什么也不做)时,它仍然是一行(不良行为).
UILabel的头文件说:
// Support for constraint-based layout (auto layout)
// If nonzero, this is used when determining -intrinsicContentSize for multiline labels
@property(nonatomic) CGFloat preferredMaxLayoutWidth NS_AVAILABLE_IOS(6_0);
Run Code Online (Sandbox Code Playgroud)
至于常数,我找不到任何东西.我能想到的最接近的常数是什么UITableViewAutomaticDimension,哪个不起作用.
这是故事板的样子......
自动布局宽度:
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="1000" text="Foo" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Bis-iG-g4l">
<rect key="frame" x="20" y="116" width="560" height="21"/>
<fontDescription …Run Code Online (Sandbox Code Playgroud) 我已经实现了UIApplicationDelegate
application:didFinishLaunchingWithOptions:
Run Code Online (Sandbox Code Playgroud)
和
application:handleOpenURL:
Run Code Online (Sandbox Code Playgroud)
根据规范,即
application:didFinishLaunchingWithOptions:
returns YES
Run Code Online (Sandbox Code Playgroud)
和
application:handleOpenURL: opens the URL.
Run Code Online (Sandbox Code Playgroud)
该代码在iOS 4下运行(在两种情况下,即,当应用程序启动时以及从暂停状态变为活动状态时).但是,代码在iOS 3.2下不起作用.
可能重复:
检查iPhone iOS版本
iOS 5中的一项更改是覆盖drawrect方法的能力.这意味着我需要以不同的方式更改navigationBar和tabBar的外观.我可以使用苹果新方法:
[[UINavigationBar appearance]setBackgroundImage:[UIImage imageNamed:@"navigationBarBackgroundRetro.png"] forBarMetrics:UIBarMetricsDefault];
//I create my TabBar controlelr
tabBarController = [[UITabBarController alloc] init];
// I create the array that will contain all the view controlers
[[UITabBar appearance] setBackgroundImage:
[UIImage imageNamed:@"navigationBarBackgroundRetroTab.png"]];
[[UITabBar appearance] setSelectionIndicatorImage:
[UIImage imageNamed:@"tab_select_indicator"]];
Run Code Online (Sandbox Code Playgroud)
我正在开发适用于iOS 4.3和5.0的应用程序.但是,iOS 5忽略了drawrect我覆盖的方法,所以它应该运行上面的代码.如何检查iOS版本,以便我可以使用上面的代码,如果设备在iOS 5上?
我在我的应用程序中使用MGSplitViewController库.直到iOS7它运行良好,但对于iOS8,由于iOS8中UIPopoverController 的行为改变,它无法按预期工作.附件是在iOS8上运行MGSplitView代码的屏幕截图:
这显示了错误的行为.它应该像下面的截图:

我已经读过某个地方MGSplitViewController库不会更新iOS8修复程序.有人知道我们是否有另一个适用于iOS8的库,并且具有与MGSplitViewController类似的功能.
运行时(例如[[UIDevice currentDevice] systemVersion])和编译时之间有什么区别,例如__IPHONE_OS_VERSION_MIN_REQUIRED检查?什么时候你应该一个在另一个?
难道__IPHONE_OS_VERSION_MIN_REQUIRED只是一个变量构建设置设置?
我已经阅读了如何定位特定iPhone版本的答案?以及下面列出的其他相关问题.
但是,我刚刚注意到__IPHONE_OS_VERSION_MIN_REQUIRED = 30200当我使用Xcode 4在iPhone(4.3.1)上构建和运行时.为什么?
当您将代码提交给Apple时,他们是否为每个存在的iPhone版本编译了一个版本,并相应地进行设置__IPHONE_OS_VERSION_MIN_REQUIRED?
这样,您可以检查__IPHONE_OS_VERSION_MIN_REQUIRED并了解运行代码的iOS版本.
我在我的代码中实现了这个方法,以了解何时会发生接口方向更改:
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
Run Code Online (Sandbox Code Playgroud)
我依靠这个来设置我的观点.在iOS 4或5中,当方向改变时,它会被正确调用.
在iOS 4中,它也会在控制器首次加载时被调用(无论方向是否发生变化,它都会在开始时以正确的方向调用一次).
问题是我在iOS 5中注意到这种情况不再发生了.当方向改变时调用该方法,而不是在控制器最初加载时调用.这对我来说是个问题,因为我依靠它来根据方向设置初始视图放置.
任何想法为什么这种行为改变?处理这个问题的最佳方法是什么?如果在iOS 5上,我应该检查viewDidLoad中的方向,然后手动调用willRotate和didRotate方法吗?这感觉有点像黑客.
感谢您提供的任何输入.
在iOS 9苹果iPad popOver出现之前,背景暗淡.但是在iOS 9中显示popOver时,它永远不会使背景视图变暗.我想在iOS 9中调暗背景视图.任何解决方案
有人遇到过这种情况么?在iOS 4模拟器上运行时,以下代码报告"YES",但根据Apple文档,addChildViewController方法仅适用于iOS 5及更高版本.这似乎不是正确的行为,这是一个错误吗?
if([UIViewController instancesRespondToSelector:@selector(addChildViewController:)]) {
NSLog(@"YES");
} else {
NSLog(@"NO");
}
Run Code Online (Sandbox Code Playgroud) 我用这个代码
#define IS_IOS7 (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1)
Run Code Online (Sandbox Code Playgroud)
查找应用程序是否在iOS7上运行.但我现在需要知道它是否在iOS7.1上运行但是没有任何NSFoundationVersionNumber_iOS_7_0和NSFoundationVersionNumber_iOS_7_1
我知道的定义
#define NSFoundationVersionNumber_iOS_6_1 993.00
Run Code Online (Sandbox Code Playgroud)
所以也许我可以与高于993的数字进行比较,但我不知道.有人得到安全可靠的解决方案吗?
ios ×7
iphone ×4
ios4 ×2
ios5 ×2
ipad ×2
objective-c ×2
autolayout ×1
compile-time ×1
ios7 ×1
ios7.1 ×1
ios8 ×1
ios9 ×1
orientation ×1
runtime ×1
uilabel ×1
version ×1
xcode ×1