当我隐藏它时,为什么状态栏会向我的图像滑回20点?

时间:2015-01-30 15:49:03

标签: ios swift uiimagepickercontroller

调用UIImagePickerController时似乎存在错误。即使它不应显示状态栏。

要解决使用子类化的问题:

class MyImagePickerController: UIImagePickerController {

    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        self.setNeedsStatusBarAppearanceUpdate()
    }

    override func prefersStatusBarHidden() -> Bool {
        return true
    }

    override func childViewControllerForStatusBarHidden() -> UIViewController? {
        return nil;
    }
}

我使用此代码显示照片库:

let picker = MyImagePickerController()

    picker.allowsEditing = false
    picker.sourceType = .SavedPhotosAlbum
    picker.modalPresentationStyle = .Popover
    self.presentViewController(picker, animated: true, completion: nil)
    picker.popoverPresentationController?.sourceRect = CGRectMake(0,0,0,0)
    picker.popoverPresentationController?.sourceView = self.view

但是,状态栏会被隐藏,但会通过约20个点的约束来滑动连接到视图的图像。我该如何解决?

2 个答案:

答案 0 :(得分:2)

我设法通过控制imagePickerController中的导航栏来解决这个问题。这个可能适合您,但它将取决于您的问题的确切上下文(即在显示imagePicker之前的视图层次结构)。

与我的previous solution一样,你是UIImagePickerController的子类。这又是UINavigationController的子类,所以你可以得到它的导航栏。

class WNImagePickerControllerSwift: UIImagePickerController {

    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        self.setNeedsStatusBarAppearanceUpdate()
    }

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        self.setNavBar()
    }

    override func prefersStatusBarHidden() -> Bool {
        self.setNavBar()
        return true
    }

    override func childViewControllerForStatusBarHidden() -> UIViewController? {
        return nil;
    }

    func setNavBar() -> Void {
        self.setNavBar(65)
    }


    func setNavBar(height: CGFloat) -> Void {
        var frame = self.navigationBar.frame;
        frame.size.height = height;
        self.navigationBar.frame = frame;
    }

}
必须在这两个地方调用

setNavBar - 一次在动画转换之前调用prefersStatusBarHidden时,再一次在转换之后。如果您直接在viewWillAppear中调用它,它将无效。

无论如何,它值得一试,玩这个神奇的数字65来适应你所追求的导航高度。

答案 1 :(得分:1)

在编辑图像时,我正在努力解决这个20偏移问题。对我来说这似乎也是一个错误。

对我有用的唯一方法是在info.list中,将View controller-based status bar appearance设为YES。检查你是否有这个设置。

然后,如果要修改某些视图控制器中的状态栏,请转到更改它所需的每个视图控制器。