iOS 13 移除 UIView 以模拟状态栏背景

标签 ios swift uitableview uiview statusbar

我正在使用 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 !

你应该设置frameviewDidLayoutSubviews并且应该从 viewDidLoad 添加 View !

关于iOS 13 移除 UIView 以模拟状态栏背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59982970/

相关文章:

ios - 根据对象的属性减去两个对象数组

ios - 将自动触摸事件坐标发送到 UIView

Swift UI - 如何制作图像网格?

ios - 如何在 ios 中维护登录 session ?

ios - 使用与 UITableViewCell 关联的 NSURL 转到 UIWebview

ios - 从另一个 UITableViewController XCode7 Swift2 获取 numberOfRowsInSection

ios - 由于内存压力而终止

ios - 尝试使用 Watch OS 2 发送图像时出现 WCErrorDomain 7013

iOS11 在 AVPlayerItemTrack.assetTrack.mediaType 上崩溃(线程 1 : EXC_BAD_ACCESS (code=1, 地址=0x0)

ios - 更改 UITableView 自定义标题 View 的按钮图像不起作用