Дочерний ViewController для изменения размера containerView

ios swift

1502 просмотра

1 ответ

Моя иерархия приложений выглядит примерно так введите описание изображения здесь

Контроллер основного представления (назовем его Controller 1) содержит scrollView, изображение и containerView, который указывает на другой viewController и передает данные в tableView.

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

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

Я надеюсь, что в этом есть смысл.

Я читал о чем-то, что называется extendedContentSizeDidChange, но я не уверен, как правильно это реализовать или применимо ли это в моей ситуации.

реализации

 override func preferredContentSizeDidChangeForChildContentContainer(container: UIContentContainer) {
    super.preferredContentSizeDidChangeForChildContentContainer(container)
    print(container)
}

в контроллере 1 не действует

Автор: kernelpanic Источник Размещён: 08.11.2019 11:15

Ответы (1)


3 плюса

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

Внутри моего встроенного UITableViewController я добавил:

preferredContentSize.height = tableView.contentSize.height

Чтобы изменить размер контейнера, я добавил встроенный контроллер представления как дочерний элемент моего родительского контроллера представления:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if let destination = segue.destination as? MyTableViewController {
        addChildViewController(destination)
    }
}

Наконец, я добавил выход для контейнера и его ограничение по высоте и добавил следующее в родительский контроллер представления:

override func preferredContentSizeDidChange(forChildContentContainer container: UIContentContainer) {
    super.preferredContentSizeDidChange(forChildContentContainer: container)
    if let child = container as? MyTableViewController {
        containerHeightConstraint.constant = child.preferredContentSize.height
        container.updateConstraints()
    }
}
Автор: taykay08 Размещён: 28.02.2018 07:41
Вопросы из категории :
32x32