将 UITableViewController 添加到 SubView

Adding An UITableViewController on to a SubView

一个UITableViewController几乎占据了整个视图。我需要一种方法来限制它的高度、宽度并添加一些阴影等。为了清楚说明,我不会显示 UITableViewController 的内容。

在没有使用故事板的情况下,我查看了 UITableViewController:

// In another UIViewController

let otherController = OtherController() // A subclass of UITableViewController
let otherControllerView = otherController.view

someView.addSubView(otherControllerView)

[...] // bunch of constraints

备注:

AppDelegate 中,如果我将 rootController 设置为 OtherController(),则一切正常。如果我将它改回 SomeView(),我会看到修改后的 tableView。如果我点击它,它就会消失。

This was the only thing that came close 我的问题,但遗憾的是,我无法理解所提供的答案,因为对我来说没有任何意义。

我需要弄明白,为什么一碰它就消失了等等

view.bringSubviewToFront(...) 证明是徒劳的。我认为 tableView 应该在它自己的控制器中呈现,而不是在另一个视图中呈现?

所以只是为了回答这个问题,你确实有两个选择。正如 Rakesha 所建议的,一种是最好的方法。只需使用 UITableView。将其添加为子视图。完成。

并且在未来,如果您真的想要将任何 控制器 添加到任何 UIView 上,请记住您需要 添加该控制器作为child。例如,在您的情况下:

将容纳您的 UITableViewController 的视图的控制器将添加这样的 UITableViewController 作为 child。

self.addChild(yourUITableViewController)
self.whatEverViewContainer.addSubview(yourUITableViewController.view) 
// Take note of the view of your tableViewController above^.
// Then setup the constraints of your yourUITableViewController.view below.

希望对您有所帮助!

您必须将 UITableViewController 的子类的实例添加为另一个视图控制器的子视图控制器。您需要确保几点才能使其正常工作。积分如下:

  1. 创建您的 TableViewController
  2. 的实例
  3. 将其添加为另一个视图控制器的子视图控制器
  4. 将其视图添加为所需视图的子视图(您可以在 viewDidLaod 中执行这些步骤,因为它们只需执行一次)
  5. 牢记视图控制器的视图周期。在父视图控制器放置其子视图后,您必须保持子视图控制器的弱引用 TableViewController 以调整其视图框架。

代码在这里:

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    let vc = TableViewController()
    addChildViewController(vc)
    view.addSubview(vc.view)
    vc.didMove(toParentViewController: self)
    childVC = vc
}

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    childVC?.view.frame = view.frame
}