iOS 2不同的导航栏图像

时间:2014-04-09 23:27:23

标签: ios uiimagepickercontroller

我已使用以下代码替换了Xcode 5中iOS7应用程序中的nave栏(如果重要,还删除了状态栏):

AppDelegate.M

[[UINavigationBar appearance] setBackgroundImage:[UIImage imageNamed:@"navBar"] forBarMetrics:UIBarMetricsDefault];

在我的一个图像视图控制器中,我使用UIImagePicker来选择个人资料照片。问题是,当它进入照片库时,它使用主“navBar”图像隐藏了一些控件,基本上堆叠了2个相同的导航栏。我可以为照相馆设置不同的导航栏吗?这是View控制器:

FirstView.H

#import <UIKit/UIKit.h>

@interface IBFirstViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate>


@property (weak, nonatomic) IBOutlet UILabel *userName;
@property (weak, nonatomic) IBOutlet UILabel *userEmail;
@property (weak, nonatomic) IBOutlet UIImageView *backgroundImage;


- (IBAction)logout:(id)sender;
- (IBAction)edit:(id)sender;

@end

FirstView.M

- (IBAction)edit:(id)sender {
    UIImagePickerController *imagePickerController = [[UIImagePickerController alloc]init];
    imagePickerController.modalPresentationStyle = UIModalPresentationCurrentContext;
    imagePickerController.delegate = self;
    [self presentViewController:imagePickerController animated:NO completion:Nil];
}

1 个答案:

答案 0 :(得分:0)

在iOS7上使用[UINavigationBar appearance]自定义导航栏时遇到类似问题。如果我们这样做,那么UINavigationController的子类的所有iOS本机控制器也会受到影响,例如:UIImagePickerController, MFMessageComposeViewController ...

如果要在控制器中使用自定义导航样式,则必须使用UINavigationController实例而不是使用[UINavigationBar appearance]单例。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{
     ... 
     UINavigationController *navigationController = (UINavigationController*)self.window.rootViewController;
     [navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"navBar"] forBarMetrics:UIBarMetricsDefault];
     ...
}

或者就我而言,我创建了UINavigationController的子类

 - (void)viewDidLoad
{
    [super viewDidLoad];
    [self setupAppearance];
...
}

- (void)setupAppearance
{
    [self.navigationBar setBackgroundImage:[UIImage imageNamed:@"navBar"]
}

然后,当您创建UIImagePickerController实例时,只需自定义其导航栏

- (IBAction)edit:(id)sender {
    UIImagePickerController *imagePickerController = [[UIImagePickerController alloc]init];
    imagePickerController.modalPresentationStyle = UIModalPresentationCurrentContext;
    imagePickerController.delegate = self;

    // Custom another navigation style
    [imagePickerController.navigationBar setBackgroundImage:[UIImage imageNamed:@"NEW-NAV-BAR-IMAGE"];

    [self presentViewController:imagePickerController animated:NO completion:Nil];
}