【发布时间】:2018-11-30 18:57:07
【问题描述】:
将自定义 UIView 加载到 ViewController 中很简单:
if let randomView = Bundle.main.loadNibNamed("RandomView", owner: self, options: nil)?.first as? RandomView {
self.view.addSubview(randomView)
}
这个 randomView 通常还会显示任何标签、文本字段等,它们位于其 .xib 文件中。但是,如果我将 UITableView 放在它的 .xib 文件中,它根本不会显示。
为了增加混乱:如果我创建一个单独的 xib 文件并仅在其中放置一个 UITableView,我可以使用 Bundle.main.loadNibNamed 加载它并正确显示。
我认为这与设置委托或数据源无关。将裸表放在 randomView 的 .xib 文件中时,它本身不会显示。虽然标签、文本输入等其他元素也可以。
单独的 .xib 文件中的 UITableView 会在没有设置任何委托或数据源的情况下正确加载和显示。
【问题讨论】:
-
为了让您更正:表格视图是您的
randomView的子视图,但是当您将randomView添加为self.view的子视图时,它不再具有表格视图作为子视图? -
是的。我添加了两个屏幕截图来显示两个示例的层次结构。两者都使用 loadNibNamed 方法加载到 viewController 中。
-
如何访问第一个示例中的表格视图,以设置数据源?还要检查第一张图片中的红色箭头 - 也许一些自动布局约束会扰乱您的视图?
-
所以问题实际上是 UITableView 缺少约束,这很奇怪,因为 UIView 中的其他元素都不需要显示约束。当我将 UITableView 放在单独的 .xib 中时,它也不需要显示约束。谢谢你的提示!!!
-
@r6bQ4xoC79rhJXFw 一些 UI 元素具有所谓的固有内容大小,而有些则没有。那些不需要高度和宽度限制的。其他人将需要它们。从 xib 加载它仍然需要 with 和 height 但最有可能根据最佳猜测加载。
标签: ios uitableview