我已使用以下代码替换了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];
}
答案 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];
}