TableViewCell выходит за пределы в TableView - PullRequest
0 голосов
/ 30 января 2019

У меня есть табличное представление, и внутри него я добавил ячейку с меткой справа от вида.

Вот как выглядит моя ячейка: enter image description here

Но когда я запускаю приложение, это то, что я получаю.(Он запускается на iPhone 6S):

enter image description here

Как видите, ярлык выталкивается.

Результат на iPhone XR в порядке.Вот снимок экрана для XR: enter image description here

Вот код для контроллера представления, где делегаты представления таблицы:

import UIKit

class TableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

@IBOutlet var tableView: UITableView!

override func viewDidLoad() {
    super.viewDidLoad()

    tableView.dataSource = self
    tableView.delegate = self
    tableView.separatorStyle = .none

    let headerViewNibName = UINib(nibName: "HeaderCell", bundle: nil)
    tableView.register(headerViewNibName, forCellReuseIdentifier: "headerCell")
}

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

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if indexPath.row == 0 {
        let cell = tableView.dequeueReusableCell(withIdentifier: "headerCell", for: indexPath) as! HeaderCell
        cell.isUserInteractionEnabled = false
        return cell
    }

    return UITableViewCell()
}

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    if indexPath.row == 0 {
        return 138
    }

    return 0
}

}

Может кто-нибудь объяснить, пожалуйстапочему это происходит?

Редактировать:

Прикрепить снимок экрана для вида ячейки с видимыми ограничениями: enter image description here

Ответы [ 5 ]

0 голосов
/ 30 января 2019

Просто позвоните layoutIfNeeded на свой мобильный.

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if indexPath.row == 0 {
    let cell = tableView.dequeueReusableCell(withIdentifier: "headerCell", for: indexPath) as! HeaderCell
    cell.isUserInteractionEnabled = false
    cell.layoutIfNeeded()
    return cell
}

return UITableViewCell()
}
0 голосов
/ 30 января 2019

Это может произойти из-за неправильных ограничений для вашего UITableView или .xib UITableViewCell или Label в ячейке таблицы.Итак, выполните следующие шаги:

  • Дайте ограничения на просмотр таблицы в раскадровке как top, bottom, лид и трейлинг = 0 для его суперпредставления.
  • Теперь идина ваш UITableViewCell xib и проверьте его прямоугольник кадра, затем установите ограничения Label как верхний, нижний, ведущий, трейлинг = 0 для его суперпредставления и убедитесь, что выустановили флажок Ограничить поля в раскадровке.Таким образом, ваша метка будет вписываться в ее суперпредставление, то есть ячейка таблицы в соответствии с изменением фрейма ячейки в соответствии с устройствами.
  • Теперь установите свойство выравнивания текста метки в правое положение, поскольку вам требуется текст справа от представления.
  • Теперь установите рамку ячейки таблицы в cellForRow, как показано ниже:

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    if indexPath.row == 0 {
        let cell = tableView.dequeueReusableCell(withIdentifier: "headerCell", for: indexPath) as! HeaderCell
        cell.frame = CGRect(x: 0, y: cell.frame.origin.y, width: tableView.frame.size.width, height: cell.frame.size.height)
        self.view.layoutIfNeeded()
        cell.isUserInteractionEnabled = false
        return cell
    } 
    return UITableViewCell()
    }
    
0 голосов
/ 30 января 2019

Поскольку размер экрана изменяется, пользовательский интерфейс не должен разрабатываться статически.Сначала вы должны сделать правильные ограничения с корневым представлением контроллера и табличным представлением, чтобы ширина табличного представления соответствовала корневому представлению контроллера.И затем сделайте так, чтобы конечное ограничение вашего ярлыка не превышало конечное значение ячейки.

0 голосов
/ 30 января 2019

Вы должны установить рамку для вашего headerViewNibName.и ширина должна быть равна ширине вашего View.

0 голосов
/ 30 января 2019

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

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