Невозможно вставить UIScrollView выше UIView в другую сцену с помощью XCode 8
У меня есть существующее приложение для iPad (портретный режим), в котором я пытаюсь добавить ландшафтный режим в XCode. Я смог сделать это на первом простом представлении, виденном ниже, изменив класс в XCode на UIScrollView, и UIView упал в строку ниже него (я думаю, что UIView был добавлен XCode, но не уверен, что tho'). Scrollview отлично работает в ландшафтном режиме.
Когда я попытаюсь сделать то же самое со следующей сценой, это не позволит мне снова изменить порядок, как показано в следующий образ; я не уверен, почему он не позволит то же самое:
Есть идеи? Есть ли другой способ сделать это?
Обновление Вот изображение, показывающее положение попытки вставить UIScrollView в UIVIewController (Book Details - это UIViewController; Book Detail View - это UIView):
4 ответа:
Хорошо сделайте это на втором контроллере: 1. Удалите основную
У вас будет идеальный порядок и желаемый результат, как в первой сцене. В вашем случае выберите Вид в нижней части руководства по компоновке, нажмите backspace, перетащите UIScrollView на эту книгу. Овации.UIView
изUIViewController
сцены, затем, 2. Добавьте сверхуUIScrollView
. 3. ДобавьтеUIView
какUIScrollView
подвида.
КАК РАБОТАТЬ С SCROLLVIEW
- Ваш
navigation bar
всегда находится вверху с высотой44px
и верхним пространством20px
(верхний20px
предназначен для строки состояния, т. е. для значка зарядки, сети и т. д., который вы видите в своем устройстве ).Причина за тем, чтобы исправить
navigation bar
вверху, заключается в том, что везде, где пользователь находится в VC, вы всегда должны показать ему, в каком VC он присутствует в это время, иначе качество вашего приложения может быть низким(я сказал, Может быть). Ведь вы можете добавитьnavigation Bar
вUIScrollView
свой ваш выбор.Верхний зеленый вид, который вы видите, я просто беру вид как
statusBar
высоты20px
, чтобы показать разницу.
Теперь добавьте
UIScrollView
в оставшуюся частьViewController
и приведите ниже ограничения:
- сверху до navgationBar
0px
- ведущий, замыкающий, Нижний к супервизору как
0
.Теперь ваш VC будет как ниже. Красная точка, указывающая на то, что ограничение можно пропустить. Не беспокойтесь об этом, пока ваши компоненты внутри
UIScrollView
не установлены должным образом, он показывает вам ту же ошибку.
Теперь добавьте
UIView
вUIScrollView
(говорит viewMain) и дать ограничения такой
- сверху, снизу, спереди, сзади до
scrollview
как0
- равная вам ширина
viewVC
.viewVC
- это точка зрения ВК. вы получаете этот взгляд, когда берете новыйUIViewController
. Теперь ваш пользовательский интерфейс будет какИ ваша иерархия взглядов будет выглядеть так:
Здесь я предполагаю, что вы просто прокручиваете свой вид в вертикальном направлении, а не в горизонтальном.
Теперь я собираюсь добавить 5 видов разной высоты в
scrollview
проверить это.Добавьте представление в
viewMain
(говорит viewYellow) и дайте ограничение ниже;
- сверху, ведущий трейлинг к
mainView
как0px
- высота
180px
Теперь ваш пользовательский интерфейс будет похож на
Теперь так же, как
step 4
добавить еще четыре вида (viewGreen, viewBlue, viewRed, viewPurple) и дает ограничения, как показано ниже
viewGreen :
1. сверху донизуviewYellow
0px
2. ведущий трейлинг кmainView
как0px
и 3. высота150px
.
viewBlue :
1. сверху доviewGreen
0px
2. ведущий трейлинг кmainView
как0px
и 3. высота80px
.
viewBlue :
1. сверху донизуviewGreen
0px
2. ведущий трейлинг кmainView
как0px
и 3. высота80px
.
viewRed :
1. сверху донизуviewBlue
0px
2. ведущий трейлинг кmainView
как0px
и 3. высота140px
.
- [53]} 1. сверху донизу
viewRed
0px
2. ведущий трейлинг кmainView
как0px
и 3. высота128px
. 4. снизу доmainView
0px
.Теперь ваш пользовательский интерфейс и иерархия представлений будут выглядеть следующим образом
Не беспокойтесь о
viewPurple
, поскольку он мало фигурирует вUI
, но доступен в иерархии. этоscrollView
и это очень безопасно. СмотритеПримечание: нет ограничений ошибка и предупреждение доступны в
UIViewController
, потому что, как я уже сказал вам, когда вы устанавливаете внутренний компонентscrollView
правильно с ограничениями будет решена ошибка ограничений.Важно: как вычисляется Высота ScrollView
Как вы устанавливаете ограничение каждого вида с ограничением сверху, снизу и высоты к
mainView
такmainView
высота вычисляется следующим уравнениемmainView.height = viewYellow.top + viewYellow.height + .... for all view + viewPurple.bottom
И
scrollView
высота будет рассчитываться следующим образом:scrollView.height = mainView.height
Однако каждый вид имеет постоянную высоту, так что высота вращения будет такой же.
Конечный Результат
Портрет
Пейзаж
Ни один из ответов не решил проблему изменения существующего приложения , поэтому я запросил техническую поддержку Apple. Они тоже не решили эту проблему, а скорее дали мне посмотреть некоторые документы. @Aragunz, вероятно, подошел ближе всего, предположив, что это была / есть проблема в XCode 8. Мне остается только переписать раскадровку с нуля, сохранив существующие классы.
Выберите Сведения о книге
UIViewController
в раскадровке, а затем просто выберите корневой вид. Удалите его, а затем перетащитеUIScrollView
на вашUIViewController
. Теперь ваше корневое представление должно бытьUIScrollView
Примечание: лично я предпочитаю следующую иерархию представлений:
|---UIView |---UIScrollView |---UIView //(to act as a container) |---UIView |---UIView |---UIView |---UIView
Позволяет легко масштабировать приложение по мере необходимости, а также позволяет autoLayout довольно легко управлять настройкой размера содержимого вашего
UIScrollView