Невозможно вставить UIScrollView выше UIView в другую сцену с помощью XCode 8


У меня есть существующее приложение для iPad (портретный режим), в котором я пытаюсь добавить ландшафтный режим в XCode. Я смог сделать это на первом простом представлении, виденном ниже, изменив класс в XCode на UIScrollView, и UIView упал в строку ниже него (я думаю, что UIView был добавлен XCode, но не уверен, что tho'). Scrollview отлично работает в ландшафтном режиме.

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

Есть идеи? Есть ли другой способ сделать это?

Обновление Вот изображение, показывающее положение попытки вставить UIScrollView в UIVIewController (Book Details - это UIViewController; Book Detail View - это UIView):

Введите описание изображения здесь

4 4

4 ответа:

Хорошо сделайте это на втором контроллере: 1. Удалите основную UIView из UIViewController сцены, затем, 2. Добавьте сверху UIScrollView. 3. Добавьте UIView как UIScrollView подвида.

У вас будет идеальный порядок и желаемый результат, как в первой сцене. В вашем случае выберите Вид в нижней части руководства по компоновке, нажмите backspace, перетащите UIScrollView на эту книгу. Овации.

Вот результат.: Введите описание изображения здесь

КАК РАБОТАТЬ С SCROLLVIEW

  1. Ваш navigation bar всегда находится вверху с высотой 44px и верхним пространством 20px (верхний 20px предназначен для строки состояния, т. е. для значка зарядки, сети и т. д., который вы видите в своем устройстве ).

Причина за тем, чтобы исправить navigation bar вверху, заключается в том, что везде, где пользователь находится в VC, вы всегда должны показать ему, в каком VC он присутствует в это время, иначе качество вашего приложения может быть низким(я сказал, Может быть). Ведь вы можете добавить navigation Bar в UIScrollView свой ваш выбор.

Верхний зеленый вид, который вы видите, я просто беру вид как statusBar высоты 20px, чтобы показать разницу.

Введите описание изображения здесь

  1. Теперь добавьте UIScrollView в оставшуюся часть ViewController и приведите ниже ограничения:

    • сверху до navgationBar 0px
    • ведущий, замыкающий, Нижний к супервизору как 0.

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

Введите описание изображения здесь

  1. Теперь добавьте UIView в UIScrollView (говорит viewMain) и дать ограничения такой

    • сверху, снизу, спереди, сзади до scrollview как 0
    • равная вам ширина viewVC. viewVC - это точка зрения ВК. вы получаете этот взгляд, когда берете новый UIViewController. Теперь ваш пользовательский интерфейс будет как

Введите описание изображения здесь

И ваша иерархия взглядов будет выглядеть так:

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

Введите описание изображения здесь

  1. Теперь я собираюсь добавить 5 видов разной высоты в scrollview проверить это.

  2. Добавьте представление в viewMain (говорит viewYellow) и дайте ограничение ниже;

    • сверху, ведущий трейлинг к mainView как 0px
    • высота 180px

Введите описание изображения здесь

Теперь ваш пользовательский интерфейс будет похож на

Введите описание изображения здесь

  1. Теперь так же, как 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