相关疑难解决方法(0)

如何检测当前iOS是4.1还是4.2?

可能重复:
检查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".

谢谢你的帮助.

董道

iphone ios4

18
推荐指数
4
解决办法
1万
查看次数

如何以编程方式自动将标签的preferredMaxLayoutWidth设置为自动?

当我尝试在故事板中将标签的首选宽度设置自动时,我收到以下错误:

属性不可用:自动首选最大布局宽度在8.0之前的iOS版本上不可用

由于我需要我的布局适用于iOS 7和8,我计划执行以下操作:

  1. 在故事板中将值设置为Explicit.
  2. 在iOS 7上,以编程方式将值设置为显式的计算宽度.
  3. 在iOS 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)

iphone objective-c uilabel ios autolayout

15
推荐指数
1
解决办法
8692
查看次数

使用URL(通过UIApplicationDelegate的handleOpenURL)在iOS 4下工作但不在iOS 3.2下工作

我已经实现了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 ipad iphone-sdk-3.2 ios

11
推荐指数
2
解决办法
2万
查看次数

检查设备是否运行iOS 5或更高版本

可能重复:
检查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上?

xcode ios ios5

10
推荐指数
1
解决办法
3万
查看次数

iOS8 MGSplitViewController替代方案

我在我的应用程序中使用MGSplitViewController库.直到iOS7它运行良好,但对于iOS8,由于iOS8中UIPopoverController 的行为改变,它无法按预期工作.附件是在iOS8上运行MGSplitView代码的屏幕截图:

iOS 8 MGSplitView

这显示了错误的行为.它应该像下面的截图: 在此输入图像描述

我已经读过某个地方MGSplitViewController库不会更新iOS8修复程序.有人知道我们是否有另一个适用于iOS8的库,并且具有与MGSplitViewController类似的功能.

uisplitviewcontroller uipopovercontroller ios8

10
推荐指数
1
解决办法
1808
查看次数

运行时与编译时iPhone版本检查

运行时(例如[[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版本.

相关问题:

iphone runtime version compile-time ios

8
推荐指数
1
解决办法
5346
查看次数

iOS 5:willRotateToInterfaceOrientation:首次加载控制器时未调用持续时间

我在我的代码中实现了这个方法,以了解何时会发生接口方向更改:

- (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方法吗?这感觉有点像黑客.

感谢您提供的任何输入.

orientation ios5

8
推荐指数
1
解决办法
8535
查看次数

如何在iOS 9中添加UIPopOverController暗淡背景.(iPad)

在iOS 9苹果iPad popOver出现之前,背景暗淡.但是在iOS 9中显示popOver时,它永远不会使背景视图变暗.我想在iOS 9中调暗背景视图.任何解决方案

objective-c ipad uipopovercontroller ios ios9

8
推荐指数
1
解决办法
788
查看次数

UIViewController报告为响应addChildViewController:在iOS 4上

有人遇到过这种情况么?在iOS 4模拟器上运行时,以下代码报告"YES",但根据Apple文档,addChildViewController方法仅适用于iOS 5及更高版本.这似乎不是正确的行为,这是一个错误吗?

if([UIViewController instancesRespondToSelector:@selector(addChildViewController:)]) {
    NSLog(@"YES"); 
} else {
    NSLog(@"NO");
}
Run Code Online (Sandbox Code Playgroud)

uiviewcontroller ios4 ios

7
推荐指数
1
解决办法
1800
查看次数

检测iOS 7.1版本

我用这个代码

#define IS_IOS7 (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1)
Run Code Online (Sandbox Code Playgroud)

查找应用程序是否在iOS7上运行.但我现在需要知道它是否在iOS7.1上运行但是没有任何NSFoundationVersionNumber_iOS_7_0NSFoundationVersionNumber_iOS_7_1

我知道的定义

#define NSFoundationVersionNumber_iOS_6_1  993.00
Run Code Online (Sandbox Code Playgroud)

所以也许我可以与高于993的数字进行比较,但我不知道.有人得到安全可靠的解决方案吗?

ios ios7 ios7.1

7
推荐指数
1
解决办法
2937
查看次数