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條經驗 獲得超6個贊
您真的需要兩個目標嗎?我像這樣工作,我有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 關注
- 490 瀏覽
添加回答
舉報