Хорошо, похоже, вы создали свой пользовательский интерфейс, используя раскадровки. Это нормально, но вы должны знать, что существует другой способ создания элементов пользовательского интерфейса (tableViews, кнопок и т. Д.): Программно.
Поскольку вы использовали раскадровки, вы, возможно, забыли проверить / снять некоторые настройки в них, которые могут вызвать проблему, с которой вы столкнулись, и я, вероятно, не смогу легко диагностировать вашу проблему. Поэтому я покажу вам, как это исправить программно.
Программный
Вы можете установить ограничения вашего tableView программно, внутри viewController, который вы пытаетесь представить.
Так что, если ваш представляемый 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
}
}
Другой (гораздо более простой) способ создания viewController, который содержит tableView, состоит в том, чтобы просто иметь viewController наследовать от UITableViewController
вместо UIViewController
. Это аккуратный маленький трюк наследования, который вы можете использовать, чтобы сделать свой код намного более лаконичным и избежать написания кода, который не нужно писать. Если вы наследуете от UITableViewController
, вы автоматически получаете «бесплатный» tableView внутри вашего viewController без необходимости создавать новый:
class viewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
}
Обычно мы видим, что viewController наследуется от UITableViewController
, если мы планируем иметь только один элемент пользовательского интерфейса: tableView. С другой стороны, если мы хотим иметь более сложный макет в нашем viewController (например, tableView, занимающий только часть viewController, а остальную часть пространства занимают другие элементы пользовательского интерфейса), мы можем захотеть иметь viewController наследуется от UIViewController
и затем создает внутри него tableView (как в первом примере, который я вам показал).
Раскадровка
При использовании раскадровок первое, что вы должны убедиться, что вы делаете правильно, это то, что вы используете AutoLayout, чтобы установить ограничения для вашего tableView. В main.storyboard перейдите к представлению, которое вы хотите представить, и нажмите на tableView. Затем наведите курсор мыши на кнопку «Выровнять» прямо здесь:
Убедитесь, что вы отметили «Горизонтально в контейнере» и «Вертикально в контейнере». Это центрирует ваш tableView в его superView.
Затем также измените следующее:
Убедитесь, что опция «Ограничение полей» включена. Это ограничивает поля вашего tableView в его superView (в идеале).