динамический tableHeaderView не работает должным образом - PullRequest
0 голосов
/ 31 декабря 2018

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

Я попытался использовать метод systemLayoutSizeFitting & sizeToFit, чтобы установить новую высоту для представления таблицы, к сожалению, это, кажется, работает хорошоно не так, как я хочу (один из динамических интерфейсов обрезается).Я попытался установить приоритет сопротивления сжатию контента для пользовательского интерфейса, который я хочу, чтобы он был динамическим, (1000), но его доза не работает так же хорошо ... каждый раз, когда обрезается хотя бы один пользовательский интерфейс.

view simulator output image

another simulator output image

@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var podView: PodView!
@IBOutlet weak var postCaption: UILabel!

var pod: Pod!

override func viewDidLoad() {
    super.viewDidLoad()

    //set header view
    podView.setPod(image: pod.image, title: pod.title, description: pod.description, viewWidth: UIScreen.main.bounds.width)
    podView.sizeToFit()
    postCaption.text = pod.description
    postCaption.sizeToFit()
    let height = tableView.tableHeaderView!.systemLayoutSizeFitting(UIView.layoutFittingCompressedSize).height
    tableView.tableHeaderView!.frame.size.height = height
}

редактировать: ограничение:

ограничение просмотра

ярлык Ограничение

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

Для TableHeaderView с динамической высотой.Добавьте следующий код в ваш viewController.Он будет работать как шарм.

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    if let headerView = tableView.tableHeaderView {
        let height = headerView.systemLayoutSizeFitting(UILayoutFittingCompressedSize).height
        var headerFrame = headerView.frame

        //Comparison necessary to avoid infinite loop
        if height != headerFrame.size.height {
            headerFrame.size.height = height
            headerView.frame = headerFrame
            tableView.tableHeaderView = headerView
        }
    }
}

Примечание : убедитесь, что ваш tableHeaderView имеет правильные AutoLayout ограничения для получения правильной высоты.

0 голосов
/ 31 декабря 2018

Попробуйте выполнить следующие действия для создания ячейки динамического заголовка табличного представления : -

1 - добавить один UItableViewCell в табличное представление из раскадровки

2 - создать tableView header пользовательский интерфейссогласно вашему требованию.

3 - Создайте класс как TableViewHeaderCell что-то в соответствии с вашим требованием, что вы хотите показать в ячейке заголовка.

4 - Затем в классе ViewController реализуйте headerview delegate method.

/**
    Tableview header method 
*/
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {

}

5 - В этом методе вы хотите создать TableViewHeaderCell объект и вернуть cell content View следующим образом.

    /**
    Table Header view cell implement and return cell content view when you create cell object with you identifier and cell name after that you have to mention height for header cell
    */
  override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
                let cell = tableView.dequeueReusableCell(withIdentifier: "Cell Identifier") as! CellName
                return cell.contentView
   }

6 - Реализация Tableview header height method

/**
Here you can specify the height for tableview header which is actually your `TableViewHeader Cell height`
*/
override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
       //For eg
        return 100
    }

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

Спасибо,

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