TableView внутри листа формы не отображается должным образом Swift - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь показать TableView внутри листа формы. Это полностью работает, как и ожидалось iPhone. Тем не менее, когда я тестирую его на iPad по какой-то причине, его размер больше, чем у формы. Вот изображение того, о чем я говорю:

iPad iPad Table is bigger than the visible View

Как видите, текст не все виден в кадре. Полный текст: «ЭТО НЕ ПОКАЗЫВАЕТ ПОЛНОСТЬЮ»

Вот как это должно выглядеть (игнорируйте темный режим)

iPhone View showing as expected

В MainController () я представил эту страницу IntroController (), имея это в ViewDidLoad ()

let navController = UINavigationController(rootViewController: IntroController())
present(navController, animated: true, completion: nil)

В IntroController () это код.

import UIKit

var tableview: UITableView!

class IntroController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: TableCell.reuseIdentifier()) as! TableCell
        cell.label.text = "Amount"
        cell.typeLabel.text = "THIS IS NOT SHOWING FULLY"
        cell.selectionStyle = .none
        cell.accessoryType = .none
        return cell
    }

    func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        tableview = UITableView(frame: CGRect(x: 0, y: 0, width: view.frame.width, height: view.frame.height), style: .grouped)
        view.addSubview(tableview)

        tableview.register(UINib(nibName: TableCell.nibName(), bundle: nil), forCellReuseIdentifier: TableCell.reuseIdentifier())

        tableview.delegate = self
        tableview.dataSource = self

    }

}

Кто-нибудь знает, почему это происходит и как это исправить?

Спасибо!

1 Ответ

1 голос
/ 11 февраля 2020

Вместо добавления табличного представления к view из V C в качестве подпредставления, установите его непосредственно как view:

view = tableview

В качестве альтернативы используйте UITableViewController напрямую. Я настоятельно рекомендую вам выбрать этот подход.

class IntroController: UITableViewController {

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return 1
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        ...
    }

    override func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.register(UINib(nibName: TableCell.nibName(), bundle: nil), forCellReuseIdentifier: TableCell.reuseIdentifier())
    }

}

Я не уверен, что является причиной этого, но, если бы я догадался, это, вероятно, потому что view.frame по некоторым причинам не установлен на прямоугольник с размером содержимого V C (пока) при вызове viewDidLoad. Если вы переместите код, который добавляет табличное представление как подпредставление view в viewDidLayoutSubviews, то он также будет работать:

override func viewDidLayoutSubviews() {
    if view.subviews.count < 1 {
        tableview = UITableView(frame: CGRect(x: 0, y: 0, width: view.bounds.width, height: view.bounds.height), style: .grouped)
        tableview.register(UINib(nibName: TableCell.nibName(), bundle: nil), forCellReuseIdentifier: TableCell.reuseIdentifier())
        view.addSubview(tableview)

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