簡體   English   中英

我應該怎么做才能使我的應用適應iOS 5.0,並保持與iOS 4的兼容性

[英]What should I do to adapt my app to iOS 5.0 keeping compatibility with iOS 4

我今天開始使用iOS 5,並且看到XCode 4.2僅允許我選擇iOS 5作為基本SDK,而不能選擇iOS 4。

到目前為止,我已經覆蓋UINavigationBar中的drawRect:方法以自定義其外觀,但是iOS 5不再調用該方法。 現在,我必須使用[UINavigationBar外觀]來做到這一點(我認為這要好得多)。 但是,外觀方法僅在iOS 5中可用,因此如果我在iOS 4上執行我的應用程序時會崩潰,該怎么辦? 我在使用iOS 5方法的每個地方都需要在宏中檢查iOS版本嗎?

謝謝,

愛麗兒

第一個問題的答案是:您必須使用iOS5(或最新的iOS SDK)作為基本SDK,但在“部署目標”下設置最低支持的iOS版本。 您可以在其中設置iOS4.0(或任何您想要的)。

解決第二個問題的正確方法是測試功能而不是版本。 因此,類似這樣的方法適用於您的application:didFinishLaunchingWithOptions:方法:

// iOS5-only to customize the nav bar appearance
if ([[UINavigationBar class] respondsToSelector:@selector(appearance)]) {
    UIImage *img = [UIImage imageNamed: @"NavBarBackground.png"];
    [[UINavigationBar appearance] setBackgroundImage:img forBarMetrics:UIBarMetricsDefault];
}

然后,您將根據iOS5 SDK進行編譯,因此完全可以使用appearance 但是,當此編譯代碼在5之前的iOS版本上運行時,就可以了。

如前所述,您可以按原樣保留drawRect:代碼。

自定義標題的另一種方法是這樣的。

UIImage *image = [UIImage imageNamed:@"header.png"];

if([navigationBar respondsToSelector:@selector(setBackgroundImage:forBarMetrics:)] ) {
    //iOS 5 new UINavigationBar custom background
    [navigationBar setBackgroundImage:image forBarMetrics: UIBarMetricsDefault];
} 
else{
    UIImageView *imgView = [[[UIImageView alloc] initWithImage:image] autorelease];
    [imgView setUserInteractionEnabled:NO];
    [imgView setTag:TOOLBAR_TAG];
    [navigationBar insertSubview:imgView atIndex:0];
}

使用responsToSelector,您可以知道該函數是否在此處。

您可以在iOS 4使用的drawRect和[UINavigationbar外觀]返回的代理中放入相同的代碼。 兩種不同的代碼路徑。

您不能使用宏來執行此操作,因為兩個代碼路徑都必須存在,並且正確的路徑取決於運行時檢查。

太...使用這樣的東西:

NSString *os_version = [[UIDevice currentDevice] systemVersion]; 

要獲得您當前正在運行的iOS版本並在5及更高版本下進行[UINavigationBar外觀],您可以使用iOS 4上的drawRect功能。

還可以利用下載適用於iPhone和iPad的4.3模擬器的優勢。 然后,當您在4.3 --Tom上意外使用iOS 5內容時,可以更快崩潰

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM