我有一个UINavigationController,UINavigationBar hidden = YES。
我希望全屏bg嵌入在UINavigationController中的视图。
但我得到的只是: http://cs616618.vk.me/v616618797/1bf0d/FEdIn0Nn4x8.jpg
是否可以在状态栏下全屏显示? 我用独立的视图控制器实现了这一点,但是在UINavigationController中使用它时就像在图像上一样。
答案 0 :(得分:3)
检查所有视图控制器是否配置正确:
UINavigationController
:
rootViewController
(UINavigationController
内):
这是我使用上述配置和" Aspect填充"的结果。设置UIImageView
:
如果您想以编程方式执行此操作,请尝试以下操作:
在您的视图控制器代码中:
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
您正在初始化UINavigationController
(AppDelegate等):
navController.edgesForExtendedLayout = UIRectEdgeAll;
当然,不要忘记评论或删除可能会干扰这些设置的所有代码行。
答案 1 :(得分:0)
以下是我使用 Swift 5、XCode 12 所做的工作。
第 1 步(可选)- 创建自定义 UINavigationController 类
class CustomNavigationController: UINavigationController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationBar.isTranslucent = true
}
用这个 UINavigationController 子类替换你的 UINavigationController。我将此标记为可选,因为这是基于偏好的,如果您不设置它,您的导航栏将不透明,您将看不到它下面的内容。
设置 navigationBar.isTranslucent = true
可以让您看到它下方的背景,这正是我喜欢的。子类也是可选的,但您可能需要对导航栏进行其他更新,因此我总是喜欢将其设为子类。
第 2 步 - 设置背景视图限制
class CustomViewController: UIViewController {
// your background view
let bgImageView: UIImageView = {
let bgImageView = UIImageView()
bgImageView.image = UIImage(named: "gradient_background")
bgImageView.contentMode = .scaleAspectFill
return bgImageView
}()
// Get the height of the nav bar and the status bar so you
// know how far up your background needs to go
var topBarHeight: CGFloat {
var top = self.navigationController?.navigationBar.frame.height ?? 0.0
if #available(iOS 13.0, *) {
top += UIApplication.shared.windows.first?.windowScene?.statusBarManager?.statusBarFrame.height ?? 0
} else {
top += UIApplication.shared.statusBarFrame.height
}
return top
}
var isLayoutConfigured = false
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
title = "Site Visit"
// you only want to do this once
if !isLayoutConfigured() {
isLayoutConfigured = true
configBackground()
}
}
private func configBackground() {
view.addSubview(bgImageView)
configureBackgroundConstraints()
}
// Set up your constraints, main one here is the top constraint
private func configureBackgroundConstraints() {
bgImageView.translatesAutoresizingMaskIntoConstraints = false
bgImageView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor,
constant: -topBarHeight).isActive = true
bgImageView.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor,
constant: 0).isActive = true
bgImageView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor,
constant: 0).isActive = true
bgImageView.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor,
constant: 0).isActive = true
view.layoutIfNeeded()
}