Изменение размера уже представленного модального контроллера представления, используя стиль представления formSheet - PullRequest
0 голосов
/ 12 июля 2019

Перед тем, как представить контроллер вида, мы можем установить modalPresentationStyle на .formSheet, а затем установить preferredContentSize для управления размером представляемого модала:

let controller = ModalViewController()
controller.modalPresentationStyle = .formSheet
controller.preferredContentSize = CGSize(width: 200, height: 200)
present(controller, animated: true)

enter image description here

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

Я обновил preferredContentSize, но, похоже, он не действует, когда контроллер представления уже представлен.

1 Ответ

0 голосов
/ 12 июля 2019

После установки нового preferredContentSize, позвоните по этому номеру:

if let superView = view.superview?.superview {
    superView.setNeedsLayout()
}

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

- Изменить:

Более надежная реализация:

var brokenView = view
while brokenView != nil {
    brokenView?.setNeedsLayout()
    brokenView = brokenView?.superview
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...