UITableViewAlertForLayoutOutsideViewHierarchy error: Warning once only (iOS 13 GM)

前端 未结 10 739
说谎
说谎 2020-12-25 12:23

I am getting a strange error with iOS13 when performing a Segue and I can\'t figure out what it means, nor can I find any documentation for this error. The problem is that t

10条回答
  •  再見小時候
    2020-12-25 12:41

    This warning can happen du to updating table view or collection view while it is not visible, for example when it is on the parent view controller. To solve that, first, I created a property in the view controller, containing the table view to check if the view controller is visible or not, as bellow:

    var isVisible: Bool = false
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        self.isVisible = true
    }
    
    override func viewDidDisappear(_ animated: Bool) {
        super.viewDidAppear(animated)
        self.isVisible = false
    }
    

    Then in the data source delegate, before reacting to changes, first check if the view controller is visible. If it was not, do not do any updates. For example

    func controllerWillChangeContent(_ controller: NSFetchedResultsController) {
        guard isVisible else { return }
        tableView.beginUpdates()
    }
    

    You should check that visibility before doing any changes in the tableView. For example, in case of NSFetchedResultsController, it must be done in all delegate callbacks which we have implemented.

    UPDATE

    I recently found that if you update the table view with animation false, even when it is not visible, there won't be any warnings.

提交回复
热议问题