为什么我隐藏图片时状态栏向后滑动了 20 点?
Why is the status bar sliding back of 20 points my image when I hide it?
调用 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 点的约束滑动连接到视图的图像。我该如何解决这个问题?
我在编辑图像时一直在努力处理这个 20 偏移量。这对我来说也是一个错误。
唯一对我有用的是在 info.list
中,将 View controller-based status bar appearance
设置为 YES
。看看你有没有这套。
然后,如果你想修改某些视图控制器中的状态栏,请转到每个需要更改它的视图控制器。
我设法通过控制 imagePickerController 中的导航栏解决了我的问题。 可能对您有用,但这取决于您问题的确切上下文(即显示 imagePicker 之前的视图层次结构状态)。
与我的 一样,您将 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 来适应您所追求的导航栏高度。
调用 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 点的约束滑动连接到视图的图像。我该如何解决这个问题?
我在编辑图像时一直在努力处理这个 20 偏移量。这对我来说也是一个错误。
唯一对我有用的是在 info.list
中,将 View controller-based status bar appearance
设置为 YES
。看看你有没有这套。
然后,如果你想修改某些视图控制器中的状态栏,请转到每个需要更改它的视图控制器。
我设法通过控制 imagePickerController 中的导航栏解决了我的问题。 可能对您有用,但这取决于您问题的确切上下文(即显示 imagePicker 之前的视图层次结构状态)。
与我的
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 来适应您所追求的导航栏高度。