Обновление ограничений AutoLayout при изменении высоты UIView - PullRequest
0 голосов
/ 26 мая 2019

У меня в настоящее время UIView (мы назовем это viewB), добавленный к родительскому UIScrollView, который мы назовем scrollView. Это работает, как и ожидалось, с добавлением viewB следующим образом;

viewB.topAnchor.constraint(equalTo: scrollView.topAnchor).isActive = true
viewB.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor).isActive = true
viewB.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor).isActive = true
viewB.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor).isActive = true

viewB выше scrollView, поэтому его можно прокручивать по вертикали.

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

Какие методы я бы вызвал (и для каких представлений), чтобы AutoLayout сообщал scrollView, что viewB изменил размеры? Или было бы эффективнее удалить viewB из scrollView, а затем повторно добавить с новыми ограничениями?

1 Ответ

1 голос
/ 26 мая 2019

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

self.view.layoutIfNeeded()

если, например, вы добавляете его внизу, то вы должны удалить нижнее ограничение большинства нижних подпредставлений с помощью viewB и привязать его к вершине нового представления и снова подключить нижнюю часть этого нового подпредставления к нижней части viewB, а также указать высоту, ширину и xограничение, наконец, обновляет макет снова, что является утомительной проблемой, поэтому вы должны либо пойти с ним, либо с этим советом. Совет: вместо управления ограничениями вручную с помощью UIScrollView, вы можете использовать UITableView или заменить viewB на UIStackView.который имеет легко удалить / добавить / вставить функции

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