Динамическая настройка макета на основе высоты табличного представления в Swift 4 - PullRequest
0 голосов
/ 30 августа 2018

У меня есть scrollView, который содержит табличное представление, изображение и множество меток Вот пример расположения элементов управления:

  • Просмотр изображения1
  • Вид таблицы
  • Метка 1
  • Метка 2
  • Метка 3
  • Метка 4
  • Просмотр изображения 2

Таблица не прокручивается. Мне удалось изменить его высоту в зависимости от количества строк. Вот код, который я использовал, я поставил его после создания ячейки:

var frame = tableView.frame
frame.size.height = tableView.contentSize.height
tableView.frame = frame

Однако, когда регулируется высота представления таблицы, расположение других элементов управления (Label1, Label2, Label3, Label4 и Image View2) не изменилось. Они перекрываются. Как автоматически настроить расположение других элементов управления, когда высота представления таблицы регулируется?

UPDATE: viewController код:

class MyViewController: UIViewController, UITableViewDelegate, UITableViewDataSource
{
    @IBOutlet weak var _Label1: UILabel!
    @IBOutlet weak var _Label2: UILabel!
    @IBOutlet weak var _Label3: UILabel!
    @IBOutlet weak var _Label4: UILabel!
    @IBOutlet weak var _Label5: UILabel!

    @IBOutlet weak var _TableViewItems: UITableView!

    override func viewDidLoad()
    {
        super.viewDidLoad()

        // this will remove the extra empty cell divider lines
        _TableViewItems.tableFooterView = UIView()

        _TableViewItems.delegate = self
        _TableViewItems.dataSource = self

    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
        return items.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {
        let cell = tableView.dequeueReusableCell(withIdentifier: "sampleId") as! Sample
        let row = indexPath.row

        var frame = _TableViewItems.frame

        cell ._LabelNext.text = "Sample Text"

        frame.size.height = _TableViewItems.contentSize.height
        _TableViewItems.frame = frame

        return cell
    }

    override func viewWillLayoutSubviews()
    {
        super.viewWillLayoutSubviews()
        tableViewHeightConstraint.constant = _TableViewItems.contentSize.height // <------ unresolved tableViewHeightConstraint
    }
}

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Ваши элементы управления перекрываются, потому что вам нужно настроить кадр других элементов управления после того, как вы это сделаете.

var frame = tableView.frame
frame.size.height = tableView.contentSize.height
tableView.frame = frame
// Adjust Frame of other controls below tableview.

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

0 голосов
/ 30 августа 2018

Не уверен, где вы добавили упомянутый код

Но использование ограничений (autolayout) и добавление следующего кода решит вашу проблему.

override func viewWillLayoutSubviews() {
    super.viewWillLayoutSubviews()

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