gpt4 book ai didi

swift - 在 iOS 13 中将 UIImagePickerController 导航栏设置为不透明

转载 作者:行者123 更新时间:2023-12-03 09:27:52 25 4
gpt4 key购买 nike

我正在展示一个 UIImagePickerController选择图像。我的代码很简单:

private lazy var imagePicker: UIImagePickerController = {
let picker = UIImagePickerController()
picker.navigationBar.isTranslucent = false
return picker
}()

func presentPicker() {
imagePicker.sourceType = .photoLibrary
imagePicker.modalPresentationStyle = .fullScreen
present(self.imagePicker, animated: true, completion: nil)
}

我正在设置 picker.navigationBar.isTranslucent = false在选择器 Controller 中有一个不透明的导航栏。不幸的是,这不适用于 iOS 13,并且导航和状态栏是透明的。

部分解决方案 :
private func setOpaqueNavigationiOS13() {
UINavigationBar.appearance().backgroundColor = .white
}

private func resetNavigationiOS13() {
UINavigationBar.appearance().backgroundColor = .clear
}

我调用上述函数使导航栏不透明并在关闭选择器时将其重置。这使得导航栏不透明,但状态栏是透明的。我也可以实现一个 hack 使状态栏不透明,但我想应该有一个更简单的解决方案。

编辑 :
我还尝试通过新的 UINavigationBarAppearance 设置导航栏的外观:
if #available(iOS 13.0, *) {
let appearance = UINavigationBarAppearance()
appearance.configureWithOpaqueBackground()
appearance.backgroundColor = .white
UINavigationBar.appearance().standardAppearance = appearance
UINavigationBar.appearance().compactAppearance = appearance
UINavigationBar.appearance().scrollEdgeAppearance = appearance
}

或者:
if #available(iOS 13.0, *) {
let appearance = UINavigationBarAppearance()
appearance.configureWithOpaqueBackground()
appearance.backgroundColor = .white
imagePicker.navigationBar.standardAppearance = appearance
imagePicker.navigationBar.compactAppearance = appearance
imagePicker.navigationBar.scrollEdgeAppearance = appearance
}

有想出解决办法的人吗?谢谢

最佳答案

我正在发布我的解决方案,以防对其他人有帮助。
尽管马特的回答完全正确,但它适用于 全部 你的导航栏设置是通过 UINavigationBarAppearance 完成的.这对我来说没有帮助,因为我已经在 AppDelegate 中做到了:

// Make navigation bar transparent throughout whole app
UINavigationBar.appearance().setBackgroundImage(UIImage(), for: .default)

由于我的应用程序展示了很多导航栏样式,我需要一个快速修复来满足 iOS 13 的更改,我只是这样做了:
// Set nav bar to opaque 
if #available(iOS 13.0, *) {
UINavigationBar.appearance().setBackgroundImage(nil, for: .default)
}

如果需要,请不要忘记将其恢复为透明状态。

关于swift - 在 iOS 13 中将 UIImagePickerController 导航栏设置为不透明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58190354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com