2016-10-18 4 views
1

У меня есть странное поведение, когда я использую scrollView. Как показано на рисунке ниже, кнопка «Назад» имеет ограничение на нижнее пространство со значением 0. Но мы видим, что даже не ближе к нижней части прокрутки. Я уже установил scrollview равным ширине и высоте супервизора и верхнего, нижнего, заднего и ведущего пространств с 0 значением.iOS - wierd ограничения с использованием scrollview

enter image description here

enter image description here

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

Update

У меня есть код здесь https://github.com/rchampa/NDParallaxIntroView и XIB называется PageB.xib

+0

Удалить верхнее ограничение из проверки кода. – KKRocks

+0

Я обновил вопрос, потому что происходит то же самое с кнопкой «Назад» – Ricardo

+0

ОК, затем удалите ограничения высоты из scrollview, поскольку scrollview занимает высоту из своего подвью. – KKRocks

ответ

1

enter image description here Ricardo: вы добавили два ограничения в отношении управления у положения кнопки Validate коды, где ваша верхнее ограничение остановка нажмите кнопку «Подтвердить код» внизу. Поэтому, пожалуйста, удалите верхнее ограничение Validate Code только добавьте нижнее ограничение.

вам необходимо управлять всеми ограничениями, такими как высота просмотров содержимого прокрутки будет равна высоте. Увеличьте верхнее ограничение сверху.

+0

Вы говорили о кнопке «Отправка электронной почты»? Эта кнопка относится к «Проверка кода». Я обновлю вопрос, потому что это происходит и с кнопкой «Назад». – Ricardo

+0

На самом деле это происходит потому, что scrollview принимает размер контента. Таким образом, кнопка «Назад» подходит к нижней части размера содержимого прокрутки. Для управления этим вам необходимо позаботиться обо всех ограничениях UIControls сверху вниз, это увеличит размер содержимого scrollview. –

+0

Вы говорите, что мне нужно обновить ограничения верхнего и нижнего пространства прокрутки до 0 во время выполнения? – Ricardo

0

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

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

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

Итак, создайте ограничения для вашего логотипа, текстовых полей и всех кнопок по отношению друг к другу. Затем создайте ограничения с внешнего большинства подзонов на представление прокрутки.

В вашем примере вы могли бы ограничить логотип от текстового поля, 1-го текстового поля до второго текстового поля, затем 2-й текст летел на ярлык, назовите кнопку «Отправить письмо ...» и, наконец, Отправить письмо ... "в" Подтвердить код ". Для кнопки «Назад» для этого потребуется выравнивание по левому краю с текстовыми полями, а затем выравнивание по центру с помощью кнопки «Проверить код». Создайте верхнее ограничение от логотипа до прокрутки. Затем имеют ведущие и конечные ограничения из одного из текстовых полей в представление прокрутки. Наконец, создайте нижнее ограничение от кнопок «Назад» или «Проверить код» до прокрутки. Вам также понадобятся некоторые ограничения выравнивания (логотип-центр в текстовое поле является примером одного). После этого все настройки будут полностью определены для размера содержимого прокрутки.

Если я вас понимаю, мой новый вопрос: как я могу сделать подвиды сделать высоту прокрутки подходят 100% высоты экрана устройства? Есть ли способ определения весов, например Android, ? Я не знаю, как достичь этого , так как холст 600 * 600, который отличается от каждого устройства.

ответ был бы слишком долго комментарий:

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

Самое простое решение состоит в том, чтобы добавить обычный вид с ограничениями расстояния TopLeftBottomRight 0 (так что это максимальная высота и ширина экрана) и настроить вид, как у вас здесь, чтобы расположить нижнюю часть в нижней левой части экрана. время.

Существует также система весов, я могу объяснить это, если вы хотите, но пока это не требуется.

Я чувствую, что ваш следующий ответ будет чем-то вроде «что, если я хочу, чтобы он прокручивался, когда он слишком мал для текущего экрана?». Единственный способ, которым я знаю, это сделать инкапсуляцию всего вашего интерфейса в единый UIView и изменить его размер в viewDidLoad/viewDidAppear на основе размера прокрутки. Что-то вроде этого:

func viewDidLoad() { 
    super.viewDidLoad() 
    containerViewHeightConstraint.constant = scrollView.frame.size.height 
    containerViewWidthConstraint.constant = scrollView.frame.size.width 
} 
+0

Если я понимаю вас, мой новый вопрос: как я могу сделать subviews, чтобы высота прокрутки соответствовала высоте экрана 100% экрана? Есть ли способ определить вес, как Android? Я не знаю, как добиться этого, так как полотно 600 * 600, которое отличается от каждого устройства. – Ricardo