UiTableView появляется в неправильном месте на ViewController IOS - PullRequest
0 голосов
/ 06 ноября 2018

В настоящее время я работаю над приложением, которое при нажатии кнопки отображает контроллер вида модально над тем, которое включено кнопкой. Это работает нормально и отображается в правильном месте, однако, контроллер модального представления содержит UiTableView, и это, кажется, появляется в верхнем левом углу контроллера представления, а не там, где я поместил его в раскадровки. Я попытался добавить все ограничения, как показано на рисунке ниже, но безуспешно. Когда я добавляю ограничения, табличное представление вообще не появляется.

This is the image showing my Modal View Controller, With the table view being inside a view on the right hand side

Image showing where the UiTableView appears in relation to the location in storyboards

Constraints Added

Result After Constraint

Надеюсь, кто-то может помочь, поскольку я зашел в тупик.

Спасибо Джейми

1 Ответ

0 голосов
/ 06 ноября 2018

Хорошо, похоже, вы создали свой пользовательский интерфейс, используя раскадровки. Это нормально, но вы должны знать, что существует другой способ создания элементов пользовательского интерфейса (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. Затем наведите курсор мыши на кнопку «Выровнять» прямо здесь:

enter image description here

Убедитесь, что вы отметили «Горизонтально в контейнере» и «Вертикально в контейнере». Это центрирует ваш tableView в его superView.

Затем также измените следующее:

enter image description here

Убедитесь, что опция «Ограничение полей» включена. Это ограничивает поля вашего tableView в его superView (в идеале).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...