好的,您的 UI 似乎是使用故事板制作的。没关系,但您应该知道还有另一种创建 UI 元素(tableView、按钮等)的方法:以编程方式。
由于您使用了故事板,您可能忘记选中/取消选中其中可能导致您遇到的问题的某些设置,我可能无法轻松诊断您的问题。因此,我将向您展示如何以编程方式解决此问题。
以编程方式
您可以在您尝试呈现的 viewController 中以编程方式设置 tableView 的约束。
因此,如果您要呈现的 viewController 被称为 viewController 而您的 tableView 是 tableView,那么您应该具有以下内容:
class viewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
/* First, tell XCode that you want to manually set the tableView's constraints using AutoLayout */
tableView.translatesAutoresizingMaskIntoConstraints = false
self.addSubview(tableView)
/* setup constraints for your tableView */
tableView.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
tableView.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
}
}
创建包含 tableView 的 viewController 的另一种(更简单)的方法是简单地从 UITableViewController 而不是 UIViewController 获得 viewController inherit。这是一个巧妙的继承小技巧,您可以使用它使您的代码更加简洁,并避免编写不需要编写的代码。如果你从UITableViewController继承,你会自动在你的viewController中获得一个“免费”的tableView,而不需要创建一个新的:
class viewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
}
通常,如果我们只打算在其中包含一个 UI 元素:tableView,我们会继承 UITableViewController 的 viewController。另一方面,如果我们想在我们的 viewController 中有一个更复杂的布局(例如一个 tableView 只占用 viewController 的一部分,而其余的空间被其他 UI 元素占用),那么我们可能希望有viewController 继承自 UIViewController,然后在其中创建一个 tableView(就像我向您展示的第一个示例一样)。
故事板
使用情节提要时,首先要确保自己做得正确,即使用 AutoLayout 为 tableView 设置约束。在 main.storyboard 中,转到要呈现的视图并单击 tableView。然后,将鼠标悬停在此处的“对齐”按钮上:
确保同时选中“在容器中水平”和“在容器中垂直”。这会将您的 tableView 置于其 superView 的中心。
然后,还要修改以下内容:
确保选中“限制到边距”选项。这会将 tableView 的边距限制为它的 superView(理想情况下)。