1. 程式人生 > >UIImagePickerController改變statusBar顏色的問題

UIImagePickerController改變statusBar顏色的問題

使用UIImagePickerController獲取相簿照片後,發現statusBar的顏色改變了原有的顏色,需要重新設定,以便配合整體介面設計。嘗試了一些網路上的解決方案,具體方式如下:

(方法4和5親測有效,推薦使用)

方式1:

UIImagePickerController繼承UINavigationController,在呼叫UIImagePickerController的地方,加上如下程式碼:

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController
*)viewController animated:(BOOL)animated { // bug fixes: UIIMagePickerController使用中改變StatusBar顏色的問題 if ([navigationController isKindOfClass:[UIImagePickerController class]] && ((UIImagePickerController *)navigationController).sourceType == UIImagePickerControllerSourceTypePhotoLibrary) { [[UIApplication
sharedApplication] setStatusBarHidden:NO]; [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent animated:NO]; } }

該方式親測無效,根據蘋果提供的API提示 [[UIApplication sharedApplication] setStatusBarStyle:(UIStatusBarStyleLightContent)];方法只支援iOS2 - 9

 設定狀態列

方式2:

需要在Info.plist配置檔案中,增加一下兩個鍵值對(注:這個我本人建議還是加在程式碼中比較好,如果程式碼中有相應的處理,相應的controller將不受影響

)。

    <key>View controller-based status bar appearance</key>
    <true/>
    <key>Status bar is initially hidden</key>
    <false/>
    <key>Status bar style</key>
    <string>UIStatusBarStyleLightContent<string/>

該方式親測有效,但是也會給別的介面帶來問題,使用xujinshen。

方式3:

需要在Info.plist配置檔案中,增加鍵:

    <key>View controller-based status bar appearance</key>
    <true/>
        <key>Status bar is initially hidden</key>
    <false/>

然後,在對應的UIViewController子類中實現以下方法:

- (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}

該方式在對應的UIViewController子類是有效的,但是在UIImagePickerController類中沒辦法直接設定。

方式4:

宣告一個類繼承UIImagePickerController

#import <UIKit/UIKit.h>

@interface ImagePickerController : UIImagePickerController

@end

再其.m檔案實現以下方法:

- (UIStatusBarStyle)preferredStatusBarStyle
{
    return UIStatusBarStyleLightContent;
}

方式5:

實現UIImagePickerController的延展,並實現preferredStatusBarStyle方法


#import "UIImagePickerController+util.h"

@implementation UIImagePickerController (util)

// 狀態列設定
- (UIStatusBarStyle)preferredStatusBarStyle {

    return UIStatusBarStyleLightContent;
}

@end