我正在使用 UITableViewController
滚动时使导航栏消失。现在,当用户滑动表格 View 时隐藏导航栏时,可以在状态栏下方看到单元格的内容......
为了解决这个问题,我尝试插入一个 UIView
模拟状态栏的背景,一切正常,但问题是当我关闭 UITableViewController
状态栏的背景 View 不会从 super View 中移除
现在我的代码是这样的,你能帮我理解我错在哪里吗?为什么我不能删除 UIView
从superview?
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
这意味着您的背景 View 已被多次添加,这是完全错误的流程!
您正在删除最顶层的 View ,而不是以前的 View !
你应该设置frame
在 viewDidLayoutSubviews
并且应该从 viewDidLoad
添加 View !
关于iOS 13 移除 UIView 以模拟状态栏背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59982970/