Вертикальный режим прокрутки с тремя видами размером экрана

#ios #uiview #uiscrollview #constraints #autolayout

#iOS #uiview #uiscrollview #ограничения #автоматическое описание

Вопрос:

Я создаю приложение для вертикальной прокрутки, используя a UIScrollView и three UIViews . До сих пор я вручную устанавливал height три вида и contentsize вид прокрутки, используя storyboard и некоторый простой код. Однако пришло время адаптировать его и для экранов с диагональю 3,5 дюйма.

Я пытался использовать autolayout и устанавливать ограничения в раскадровке, но это не сработало слишком хорошо. Я получаю все эти ошибки / предупреждения об expected height=0 actual height=504 и scrollview has ambiguous scrollable content .

Это моя настройка:

 UIViewController {
  UIScrollView {
    UIView {content}
    UIView {content}
    UIView {content}
  }
}
  

По сути, это то, чего я хочу добиться: содержимое внутри представлений привязано к определенным местоположениям в UIView, в котором они находятся. Довольно стандартный материал.
Теперь предполагается, что каждый из трех UIViews имеет размер экрана iPhone и расположен непосредственно друг под другом. Таким образом, один вид одновременно заполняет экран, и пользователь может перейти к следующему виду, который фиксируется в нужном положении. Размер UIScrollView должен соответствовать размеру экрана, однако высота contentsize должна быть высотой трех представлений вместе взятых.

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

Любая помощь будет оценена!

Заранее спасибо!

Изображения:

Макет
Раскадровка

Ответ №1:

Ожидаемая высота = 0 появляется, когда автозаполнение неправильно вычисляет ограничения. Вы всегда можете обновить ограничения таким образом, чтобы они принимали заданное вами значение. Также для выполнения вертикальной прокрутки размер содержимого должен быть изменен в коде. Вместо установки self.ScrollView.contentSize =CGSizeMake(self.view.bounds.size.width, self.view.bounds.size.height*5); в -(void)viewDidLoad попробуйте установить его в -(void)viewDidAppear