Анимированное ограничение высоты в iOS приводит к пустому пустому пространству между двумя UIViews - PullRequest
0 голосов
/ 27 июня 2019

У меня проблема с одним из моих просмотров в моем приложении. Представления встроены в UIViewController. Я хочу одновременно изменить высоту двух видов одновременно.

У меня есть следующий макет:

Layout

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

Кроме того, существуют ограничения для нижнего обзора. Этот вид прикреплен к сторонам и имеет фиксированную высоту 64.

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

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

Но это приводит к пустому пространству между двумя видами. Когда вид свернут (когда пользователь снова нажимает), он выглядит красиво.

Вот мой код:

self.mapViewHeightConstraint.constant = self.view.frame.height * 0.40

UIView.animate(withDuration: 0.4, animations:
{
    self.view.layoutIfNeeded()
}, completion: nil})

Я также пробовал этот код (до того как я использовал ограничения, но результат был тот же):

UIView.animate(withDuration: 0.4, animations:
{
    self.tableView.frame = CGRect(x: 0, y: self.view.frame.height * 0.40, width: self.view.frame.width, height: self.view.frame.height * 0.90)

    self.mapView.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height * 0.40)
}, completion: nil})

Я пытался отключить автоматическую разметку, но это не решило проблему. Я также приложил небольшое видео:

Preview

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

...