【问题标题】:Unexpected Subview after adding UIViewContainer添加 UIViewContainer 后出现意外的子视图
【发布时间】:2020-10-03 01:13:27
【问题描述】:

我有一个 ViewController,我有一个表视图,它从结构加载数据,一切都很好。我添加了一个分段控制器,然后创建了 2 个 UIViewContainers。

我将所有 Tableview 代码移至 UIViewContainer 1,而 UIViewContainer 2 当前为空。我还将情节提要中的 TableView 移动到了新的 UIViewContainer 1

在代码 velow UIViewcontainer 1 = tableContainer UIViewController 2 = mapContainer

我已经为分段视图控制器添加了这样的代码:

@IBOutlet weak var mapContainer: UIView!
@IBOutlet weak var tableContainer: UIView!


@IBAction func showContainer(_ sender: UISegmentedControl) {
    if sender.selectedSegmentIndex == 0 {
        UIView.animate(withDuration: 0.5, animations: {
            self.tableContainer.alpha = 1
            self.mapContainer.alpha = 0
        })

    }else {
        UIView.animate(withDuration: 0.5, animations: {
            self.tableContainer.alpha = 0
            self.mapContainer.alpha = 1
        })
    }

} 

这或多或少是我的主视图控制器中唯一的代码。

当我运行时,编译工作正常,但在加载时崩溃并出现以下错误:

*** Terminating app due to uncaught exception 
'NSInternalInconsistencyException', reason: 'There are unexpected 
subviews in the container view. Perhaps the embed segue has already 
fired once or a subview was added programmatically?'
***

我是否错过了我需要对 tableView 或一般视图执行的操作?

【问题讨论】:

  • 这听起来像是以错误的方式添加了视图。我可能遗漏了一些东西,但这不足以让我解决这个错误。您是否以编程方式将视图控制器添加到另一个视图控制器中?
  • 我使用故事板添加了 2 个容器视图。我创建了 2 个 UIViewController 类型的文件来链接到这些容器,这是我出错的地方吗?当使用带有容器的分段控制器时,我是否需要创建单独的文件来为每个视图放置我的代码?
  • 我不完全理解您的设置,但是将 UIViewController 添加到另一个 UIViewController 中很容易做到。您只需要遵循某些准则即可。
  • @JadeReynolds 你的设置有点乱。我猜你没有正确导入你的整个代码。如果 tableview 在 storyboard 中,你没有创建它的 IBOutlet 吗?

标签: ios swift xcode


【解决方案1】:

日志说容器视图中有意外的子视图。您可能希望确保将所有子视图移动到(嵌入)segueD UIViewController 而不是容器本身。

【讨论】:

    【解决方案2】:

    我现在已经解决了这个问题。设置时一定出了问题,我删除了所有容器并将应用程序恢复到原来的状态,重新启动它现在可以正常工作了

    【讨论】:

      【解决方案3】:

      我的问题是我不小心在prepare(for:sender:) 中执行了segue.perform()。删除该行后,错误就消失了。

      【讨论】:

        【解决方案4】:

        就我而言,这是解决方案。鉴于您的容器视图称为containerView,请调用

        containerView.removeSubviews()
        

        打电话之前

        performSegue(withIdentifier: "YourSegueID", sender: self)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-06-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多