ios - 为什么当我隐藏图像时状态栏会向后滑动 20 点?

标签 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

但是,状态栏被隐藏,但它通过约束将连接到 View 的图像向下滑动约 20 点。我该如何解决这个问题?

最佳答案

我设法通过控制 imagePickerController 中的导航栏来解决这个问题。这可能适合您,但这取决于您问题的具体上下文(即显示 imagePicker 之前 View 层次结构的状态)。

就像我的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 来适应您想要的导航栏高度。

关于ios - 为什么当我隐藏图像时状态栏会向后滑动 20 点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28239598/

相关文章:

ios - ARC双向关系

swift - NSPredicate - 转换参数?

ios - UITextView() 不能定义为 nil?

ios - 如何从 ios 应用程序通过 BLE 打开连接到 arduino 的 LED?

ios - 尝试在 iPad 或更小的屏幕上显示时出现自动布局问题

ios - MapView 自定义 Pin 图问题

ios - 如何在 swift 中从另一个 View Controller 重新加载 tableview

ios - UIImagePickerController 在缩放时显示黑条 – 这是 iOS 中的错误吗?

ios - 检测 UIPopoverController 何时完成呈现 UIImageViewcontroller

ios - Swift 3.0 使用 write(toFile : atomically:) 写入二进制图像数据