3 回答
TA贡献1862条经验 获得超6个赞
可以在每个.storyboard或.xib文件上启用或禁用自动布局。只需选择特定文件,然后使用Xcode中的文件检查器修改“使用自动布局”属性即可:
在将部署目标设置为6.0之前的iOS版本中使用启用了自动布局的界面文件会导致编译错误,例如:
MainStoryboard.storyboard中的错误:3:iOS 6.0之前的版本上的自动版式
在项目中使用自动布局并仍保持与iOS4-5兼容性的一种选择是创建两个目标:一个用于部署目标iOS 6.0,一个用于较早的iOS版本,例如:
您也可以为每个故事板和XIB文件创建两个版本,并使用对6.0目标启用的自动布局以及对旧目标启用的自动布局,例如:
然后,您将MainStoryBoardAutoSize添加到iOS6目标的Build阶段,并将另一个文件添加到iOS4目标。您可以在此处了解有关使用多个目标的更多信息。
编辑:正如marchinram的答案所指出的,如果您从代码加载情节提要文件,并且不使用Xcode中的“主情节提要”设置来设置初始情节提要,则可以使用单个目标。
对我而言,维护多个目标和接口文件的复杂性增加的成本似乎超过了使用自动布局的好处。除少数特殊情况外,如果需要iOS4-5兼容性,最好只使用普通的旧自动调整大小(或代码中的layoutSubViews)。
TA贡献1993条经验 获得超5个赞
您真的需要两个目标吗?我像这样工作,我有2个故事板,如ImreKelényi所说,一个启用了自动布局,另一个没有启用,然后在应用程序委托中,我只是检查他们使用的是哪个版本并选择正确的故事板:
#import "AppDelegate.h"
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:(v) options:NSNumericSearch] != NSOrderedAscending)
@interface AppDelegate ()
@property (strong, nonatomic) UIViewController *initialViewController;
@end
@implementation AppDelegate
@synthesize window = _window;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UIStoryboard *mainStoryboard = nil;
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"6.0")) {
mainStoryboard = [UIStoryboard storyboardWithName:@"iPhone_iOS6" bundle:nil];
} else {
mainStoryboard = [UIStoryboard storyboardWithName:@"iPhone_iOS5" bundle:nil];
}
self.initialViewController = [mainStoryboard instantiateInitialViewController];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = self.initialViewController;
[self.window makeKeyAndVisible];
return YES;
}
@end
有2个目标也可以,但对我来说似乎太过分了
- 3 回答
- 0 关注
- 458 浏览
添加回答
举报