【问题标题】:iOS 7 UIImagePickerController navigationbar overlapiOS 7 UIImagePickerController 导航栏重叠
【发布时间】:2013-12-26 10:35:03
【问题描述】:

我在 iOS7 中访问照片库时遇到问题(iOS6 可以)。导航栏似乎与相册视图重叠,我尝试设置picker.edgesForExtendedLayout = UIRectEdgeNone;但不起作用。

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];

看看我的截图

【问题讨论】:

标签: ios ios7 uiimagepickercontroller


【解决方案1】:

这对我有用:

UIImagePickerController 将 translucent = NO 设置为导航栏

UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];

imagePicker.navigationController.navigationBar.translucent = NO;

之后,在您的 UIImagePickerController 委托中实现此代码:

- (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 版本:

func navigationController(navigationController: UINavigationController, willShowViewController viewController: UIViewController, animated: Bool) {
        if navigationController.isKindOfClass(UIImagePickerController.self) {
            viewController.navigationController!.navigationBar.translucent = false
            viewController.edgesForExtendedLayout = .None
        }
    }

【讨论】:

  • 这让我在 ipad 上崩溃??
【解决方案3】:

正如 user2192708 提到的,我认为这里的主要问题是更改选择器导航栏的默认半透明属性,我不确定您是否需要更改其他任何内容:

picker.navigationBar.translucent = NO

这将导致导航栏使用 UINavigationBar 外观,如果您在应用中的某处设置此选项,则为“默认”,否则。

【讨论】: