亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在保持與iOS 5向下兼容的同時,在iOS 6中啟用自動布局

在保持與iOS 5向下兼容的同時,在iOS 6中啟用自動布局

iOS
大話西游666 2019-10-24 10:40:54
在利用iOS 6的新自動布局功能同時仍能與早期版本的iOS上的舊設備兼容的最佳方式是什么?
查看完整描述

3 回答

?
阿波羅的戰車

TA貢獻1862條經驗 獲得超6個贊

可以在每個.storyboard或.xib文件上啟用或禁用自動布局。只需選擇特定文件,然后使用Xcode中的文件檢查器修改“使用自動布局”屬性即可:

http://img1.sycdn.imooc.com//5db10f5400017b1602580120.jpg

在將部署目標設置為6.0之前的iOS版本中使用啟用了自動布局的界面文件會導致編譯錯誤,例如:

MainStoryboard.storyboard中的錯誤:3:iOS 6.0之前的版本上的自動版式

在項目中使用自動布局并仍保持與iOS4-5兼容性的一種選擇是創建兩個目標:一個用于部署目標iOS 6.0,一個用于較早的iOS版本,例如:

http://img1.sycdn.imooc.com//5db10f560001a02001290062.jpg

您也可以為每個故事板和XIB文件創建兩個版本,并使用對6.0目標啟用的自動布局以及對舊目標啟用的自動布局,例如:

http://img1.sycdn.imooc.com//5db10f590001ad5702360037.jpg

然后,您將MainStoryBoardAutoSize添加到iOS6目標的Build階段,并將另一個文件添加到iOS4目標。您可以在此處了解有關使用多個目標的更多信息。

編輯:正如marchinram的答案所指出的,如果您從代碼加載情節提要文件,并且不使用Xcode中的“主情節提要”設置來設置初始情節提要,則可以使用單個目標。

對我而言,維護多個目標和接口文件的復雜性增加的成本似乎超過了使用自動布局的好處。除少數特殊情況外,如果需要iOS4-5兼容性,最好只使用普通的舊自動調整大小(或代碼中的layoutSubViews)。


查看完整回答
反對 回復 2019-10-24
?
ibeautiful

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個目標也可以,但對我來說似乎太過分了


查看完整回答
反對 回復 2019-10-24
  • 3 回答
  • 0 關注
  • 490 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號