Высота таблицы в зависимости от ее содержимого - PullRequest
0 голосов
/ 11 мая 2018

Я хочу создать табличное представление, которое ограничено их суперпредставлением с верхним, левым и правым полем, но с нижним полем lessThanOrEqualTo. Таким образом, если содержимое представления истории выше, чем его супер-представление, оно будет ограничено нижним полем и прокруткой. Но если его, например, только 3 ячейки, и ячейки имеют свои собственные внутренние согласованные ограничения, представление таблицы будет, например, 200 баллов, и между ними и нижним полем суперобзора будет пространство. До сих пор при попытке этого, если я не определяю нижнее ограничение или не устанавливаю его как lessThanOrEqual, я вижу неоднозначное предупреждение о расположении в визуальном отладчике.

1 Ответ

0 голосов
/ 16 мая 2018

Высота представления таблицы на основе ее содержимого с помощью UITableViewAutomaticDimension

    //make bottom margin constraint  @IBOutlet for tableView
    @IBOutlet weak var bottomConstraint: NSLayoutConstraint!
    @IBOutlet weak var tableView: UITableView!

    var rowCount = 3

    override func viewDidLoad() {
        super.viewDidLoad()
        tableView.rowHeight = UITableViewAutomaticDimension

создание выходного соединения с нижним ограничением tableView

func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
        return CGFloat.leastNormalMagnitude
    }

    var height: [CGFloat] = [0]

    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {

        let indexRowNo = indexPath.row

        //will give you cell height for indexPath
        let frame = tableView.rectForRow(at: indexPath)

        //if cell height already exists in height update value else append
        if self.height.count-1 >= indexRowNo{

            height.remove(at: indexRowNo)
            height.insert(frame.size.height, at: indexRowNo)
        }else{
            height.append(frame.size.height)
        }


        if indexPath.row == (tableView.indexPathsForVisibleRows?.last)?.row {
            //remove old cell heights if now tableView has less noOfCell after reloadData
            if self.height.count >= rowCount{
                for _ in rowCount..<self.height.count{
                    self.height.removeLast()
                }
            }
        }

        // total Height for tableView
        let totalHeight: CGFloat = height.reduce(0, +)

        //e.g. - less/greater ThanOrEqualTo bottom margin  conditions
        let viewTotalHeight = self.view.frame.height - 80


        if totalHeight <= viewTotalHeight{
            let value = (self.view.frame.height) - (totalHeight + 10)
            self.bottomConstraint.constant = value
            self.tableView.isScrollEnabled = false
        }else{
            self.bottomConstraint.constant = 0
            self.tableView.isScrollEnabled = true
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...