问题
I ran into a problem accessing photo library in iOS7 (iOS6 is OK). It seems navigation bar overlaps the photo album view, I tried to set picker.edgesForExtendedLayout = UIRectEdgeNone;
but it doesn't work.
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
picker.edgesForExtendedLayout = UIRectEdgeNone;
}
[self presentViewController:picker animated:YES completion:nil];
Look at my screenshot

回答1:
This works for me:
UIImagePickerController set translucent = NO to navigation Bar
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.navigationController.navigationBar.translucent = NO;
After this, implement this code in your UIImagePickerController delegate:
- (void)navigationController:(UINavigationController *)navigationController
willShowViewController:(UIViewController *)viewController
animated:(BOOL)animated
{
if ([navigationController isKindOfClass:[UIImagePickerController class]])
{
viewController.navigationController.navigationBar.translucent = NO;
viewController.edgesForExtendedLayout = UIRectEdgeNone;
}
}
回答2:
Swift version of the above answer:
func navigationController(navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool) {
if navigationController.isKindOfClass(UIImagePickerController.self) {
viewController.navigationController!.navigationBar.translucent = false
viewController.edgesForExtendedLayout = .None
}
}
回答3:
As user2192708 mentioned, I think the main issue here is changing the default translucent property of the picker navigationBar and I'm not sure you need to change anything else:
picker.navigationBar.translucent = NO
This will cause the the navigation bar to use the UINavigationBar appearance if you set this somewhere in your app or the "default" if not.
来源:https://stackoverflow.com/questions/20783321/ios-7-uiimagepickercontroller-navigationbar-overlap