iOS tableHeaderView в UITableViewController никогда не отображается - PullRequest
1 голос
/ 23 мая 2019

Я пытаюсь реализовать tableViewHeader (а не "viewForHeaderInSection") для моего табличного представления в UITableViewController "TBVC1".

Я попробовал два решения (не работают, конечно ...):

1ST: Добавлен UIView в верхней части моего UITableViewController в моей раскадровке. Если я добавлю UILabel (с ограничениями и т. Д.) В этот UIView и попытаюсь отобразить мой View TBVC1 .... Я ничего не вижу. Полный вид пуст. Но, если я удаляю UILabel, вставленную в заголовок UIView, я вижу все мои ячейки и цвет фона headerView ...

У вас есть идея, почему я не могу поместить какой-либо компонент пользовательского интерфейса в этот UIView?

2ND: если я попытаюсь загрузить конкретное перо UIView, например:

Bundle.main.loadNibNamed("Title", owner: nil, options: nil)!.first as! UIView
self.tableView.setTableHeaderView(headerView: customView)
self.tableView.updateHeaderViewFrame()



 extension UITableView {

/// Set table header view & add Auto layout.
func setTableHeaderView(headerView: UIView) {
    headerView.translatesAutoresizingMaskIntoConstraints = false

    // Set first.
    self.tableHeaderView = headerView

    // Then setup AutoLayout.
    headerView.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
    headerView.widthAnchor.constraint(equalTo: self.widthAnchor).isActive = true
    headerView.topAnchor.constraint(equalTo: self.topAnchor).isActive = true
}

/// Update header view's frame.
func updateHeaderViewFrame() {
    guard let headerView = self.tableHeaderView else { return }

    // Update the size of the header based on its internal content.
    headerView.layoutIfNeeded()

    // ***Trigger table view to know that header should be updated.
    let header = self.tableHeaderView
    self.tableHeaderView = header
}
}

это тоже не работает ... мой полный просмотр пуст ...

У вас есть идеи, почему мне не удается отобразить простое UILabel в моем UIView для tableViewheader?

1 Ответ

0 голосов
/ 23 мая 2019

Я не уверен, что мой путь правильный, но каждый раз, когда я устанавливаю tableHeaderView, я также устанавливаю его высоту вручную.

Если вы хотите использовать автоматическое расположение в вашем tableHeaderView, выможно вызвать systemLayoutSizeFitting(UIView.layoutFittingCompressedSize) в представлении заголовка, чтобы получить вычисленный размер и назначить высоту headerView.

Вы можете попробовать этот простой пример в Playground.

import UIKit
import PlaygroundSupport

class MyViewController: UITableViewController {
    override func loadView() {
        super.loadView()

        let headerView = UIView()
        headerView.backgroundColor = .red

        let label = UILabel()
        label.translatesAutoresizingMaskIntoConstraints = false
        label.text = "Hello World!"
        label.textAlignment = .center
        label.textColor = .white

        headerView.addSubview(label)

        let attributes: [NSLayoutConstraint.Attribute] = [.leading, .top, .centerX, .centerY]
        NSLayoutConstraint.activate(attributes.map {
            NSLayoutConstraint(item: label, attribute: $0, relatedBy: .equal, toItem: headerView, attribute: $0, multiplier: 1, constant: 0)
        })
        // We have to set height manually, so use `systemLayoutSizeFitting` to get the layouted height
        headerView.frame.size.height = headerView.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize).height

        tableView.tableHeaderView = headerView
    }
}

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