调用 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/