Проблема с uiscrollview с динамическим размером содержимого и использованием ограничений - PullRequest
0 голосов
/ 10 октября 2018

Я использую раскадровку, и для одного из моих контроллеров представления я изменил uiview на uiscrollview (называемый mainScrollView).В этом представлении прокрутки у меня есть другие объекты (кнопки, метки и т. Д.), А также UIView, который создается во время выполнения (назовем его myDataView), а его высота изменяется в зависимости от данных, которыми он заполнен.Ниже myDataView у меня есть другой UIView (назовем его descriptionView), который имеет фиксированный размер и содержит описание данных в myDataView.

Проблема, с которой я сталкиваюсь, заключается в том, что я не могу разместить descriptionView так, чтобыэто внизу mainScrollView.

На раскадровке я добавил ограничение в свой descriptionView для «Выровнять основание по: Superview».

Поскольку размер myDataView определяется после загрузки данных, которые я хочу представить, я обновляюего высота в:
переопределить func viewDidLayoutSubviews () Здесь я также обновляю mainScrollView.contentSize, чтобы он мог соответствовать всем моим объектам и обоим UIViews.

Проблема в том, что descriptionView расположен не в том месте.Он отображается в середине mainScrollView, а не в конце.Если я помещаю точку останова в viewDidLoad () и веду журнал mainScrollView.frame, он возвращает высоту 736, и в настоящее время размер содержимого равен 0. descriptionView.frame (который имеет установленную высоту 145) равен (0,0, 583,0, 414,0, 145,0),Затем, когда он достигает точки останова в начале viewDidLayoutSubviews (), высота содержимого теперь равна 466. Таким образом, теперь описание descriptionView.frame (0.0, 313.0, 414.0, 145.0).Поэтому теперь, после определения высоты myDataView, я могу установить mainScrollView.contentSize = CGSize (width: self.view.frame.width, height: newTotalHeight) и получить (414.0, 1036.0).

Ограничения были установлены на раскадровке, и после того, как descriptionView был изначально размещен, я не могу заставить его переоценить свое ограничение и перейти к (0.0, 891.0, 414.0, 145.0).

Я попытался вручную установить фрейм descriptionView, вызвав setNeedsLayout () для него и любых других представлений, а также различные другие вещи.

Есть какие-нибудь указатели относительно того, что я делаю неправильно?

...