iOS 13 去除模拟状态栏背景的UIView
iOS 13 remove UIView for simulate status bar background
我正在使用 UITableViewController
滚动时使导航栏消失。现在,当用户滑动 table 视图时导航栏被隐藏,单元格的内容显示在状态栏下方 ...
为了解决这个问题,我尝试插入一个 UIView
来模拟状态栏的背景,一切正常,但问题是当我关闭 UITableViewController
状态栏的背景视图时栏未从超级视图中删除
目前我的代码是这样的,你能帮我看看我哪里错了吗?为什么我不能从超级视图中删除 UIView
?
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
setupStatusBarView()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
navigationController?.navigationBar.isHidden = true
UIApplication.shared.windows.first?.viewWithTag(1)?.removeFromSuperview()
}
//MARK: - Setup Status Bar View
func setupStatusBarView() {
let height = view.window?.windowScene?.statusBarManager?.statusBarFrame.height ?? 0
let statusBarView = UIView()
statusBarView.frame = CGRect(x: 0, y: 0, width: view.frame.width, height:height+5)
statusBarView.backgroundColor = .systemBackground
statusBarView.tag = 1
UIApplication.shared.windows.first?.addSubview(statusBarView)
}
viewDidLayoutSubviews
多次收到调用并且您将 setupStatusBarView()
放入 viewDidLayoutSubviews
这意味着您的背景视图已添加多次,这是完全错误的流程!
您正在删除最顶层的视图,而不是之前的视图!
您应该在 viewDidLayoutSubviews
中设置 frame
并且应该添加来自 viewDidLoad
的视图!
试试这个
let subviewArray = UIApplication.shared.windows.first?.subviews
for view in subviewArray!{
if view.tag == 1{
view.removeFromSuperview()
}
}
我正在使用 UITableViewController
滚动时使导航栏消失。现在,当用户滑动 table 视图时导航栏被隐藏,单元格的内容显示在状态栏下方 ...
为了解决这个问题,我尝试插入一个 UIView
来模拟状态栏的背景,一切正常,但问题是当我关闭 UITableViewController
状态栏的背景视图时栏未从超级视图中删除
目前我的代码是这样的,你能帮我看看我哪里错了吗?为什么我不能从超级视图中删除 UIView
?
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
setupStatusBarView()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
navigationController?.navigationBar.isHidden = true
UIApplication.shared.windows.first?.viewWithTag(1)?.removeFromSuperview()
}
//MARK: - Setup Status Bar View
func setupStatusBarView() {
let height = view.window?.windowScene?.statusBarManager?.statusBarFrame.height ?? 0
let statusBarView = UIView()
statusBarView.frame = CGRect(x: 0, y: 0, width: view.frame.width, height:height+5)
statusBarView.backgroundColor = .systemBackground
statusBarView.tag = 1
UIApplication.shared.windows.first?.addSubview(statusBarView)
}
viewDidLayoutSubviews
多次收到调用并且您将 setupStatusBarView()
放入 viewDidLayoutSubviews
这意味着您的背景视图已添加多次,这是完全错误的流程!
您正在删除最顶层的视图,而不是之前的视图!
您应该在 viewDidLayoutSubviews
中设置 frame
并且应该添加来自 viewDidLoad
的视图!
试试这个
let subviewArray = UIApplication.shared.windows.first?.subviews
for view in subviewArray!{
if view.tag == 1{
view.removeFromSuperview()
}
}