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

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

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

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

ОБНОВЛЕНИЕ Вот изображение, показывающее позицию попытки вставки UIScrollView в UIVIewController (сведения о книге — это UIViewController, представление сведений о книге — это UIView):

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


person SpokaneDude    schedule 31.01.2017    source источник
comment
Попробуйте добавить навигацию над прокруткой.   -  person User511    schedule 07.02.2017
comment
В вашем существующем проекте вы встроили прокрутку, а затем представление и должны делать то, что я сказал в ответ. Это единственное решение. Если у вас есть новые, пожалуйста, знайте меня тоже.   -  person dahiya_boy    schedule 09.02.2017


Ответы (4)


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

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

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

person Aragunz    schedule 05.02.2017
comment
Невозможно добавить UIViewController; в ваших инструкциях вы предлагали совершенно новую сцену, где я добавляю UIViewController и UIScrollView под новый UIViewController или поверх него? Затем переместить существующий UIView и связанные с ним объекты в новую сцену? Затем удаление старой сцены... - person SpokaneDude; 05.02.2017
comment
Не обязательно удалять всю сцену, просто нажмите на UIView, нажмите Backspace, он удалит UIView, затем получите UIScrollView и перетащите его на тот UIViewController, с которым у вас возникли проблемы. Надеюсь, это поможет, дайте мне знать, если вам нужно больше объяснений. - person Aragunz; 05.02.2017
comment
Когда я возвращаю UIView, он удаляет его _ и все объекты под ним_, что явно не сработает... Я не могу получить UIScrollView над UIViewController, сколько бы разных способов я ни использовал попробуйте... (см. изображение в исходном вопросе) - person SpokaneDude; 05.02.2017
comment
Братан, если вы действительно хотите достичь желаемого результата, это способ, если вы хотите переключиться с одного на другое, все в порядке, вы можете получить этот вид и сохранить его в другой сцене, прежде чем добавлять вид UIScroll, позвольте мне добавить изображение в показать, если вы хотите, чтобы контроллер таким образом. - person Aragunz; 05.02.2017
comment
ОК... наконец, он был размещен, вырезав UIView, добавив UIScrollView, а затем вставив UIView под UIScrollView. Однако данные не отображаются в объектах UIView (все соединения объектов по-прежнему присутствуют в UIView). Мне не хватает некоторых соединений между UIView и UIScrollView? (Я собираюсь немного почитать и посмотреть, что я могу найти, но подумал, что вы можете знать сразу). - person SpokaneDude; 06.02.2017
comment
И он по-прежнему не прокручивается... Я сопоставил размер и происхождение прокрутки с размером UIView... без изменений! Думаю, я свяжусь с Apple и попрошу поддержку разработчиков.. спасибо за ваше время... SD - person SpokaneDude; 06.02.2017
comment
@SpokaneDude У вас есть оба ViewController, можете ли вы прислать мне архив, я вам помогу. - person Aragunz; 06.02.2017
comment
Не все приложение, а только эти два контроллера и сцены из них, скопируйте и вставьте их в раскадровку нового проекта и оба контроллера. Не весь проект. Я полностью за то, чтобы помочь вам. - person Aragunz; 07.02.2017
comment
вот... дайте мне знать, если вам нужно что-то еще... спасибо, я ценю вашу самоотверженность и поддержку... ufile.io/50886 - person SpokaneDude; 08.02.2017
comment
Я хотел бы помочь вам больше об этом, но эта сцена контроллера, к сожалению, не очень помогает, и, как я вижу, это может быть связано с ограничением или подходом, а не с разницей между просмотром прокрутки и uiview. - person Aragunz; 08.02.2017
comment
Это то, чего я боялся, потому что ничего не сработало... еще раз спасибо, я отдам вам должное за ответ и вознаграждение, если только у кого-то другого нет лучшего рабочего ответа. - person SpokaneDude; 08.02.2017
comment
Спасибо, я действительно хотел бы помочь, если вы думаете, как я могу помочь, пожалуйста, дайте мне знать. - person Aragunz; 08.02.2017

КАК РАБОТАТЬ С ПРОКРУТКАМИ

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

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

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

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

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

    • top to navgationBar 0px
    • Ведущий, ведомый, нижний для супервизора как 0.

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

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

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

    • top, bottom, leading, trailing to scrollview as 0
    • Равной вам ширины viewVC. viewVC это вид ВК. вы получаете этот вид, когда берете новый UIViewController. Теперь ваш пользовательский интерфейс будет похож на

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

и ваша иерархия представлений будет выглядеть

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

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

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

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

    • top, leading trailing to mainView as 0px
    • высота 180px

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

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

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

  1. Теперь так же, как step 4, добавьте еще четыре вида (viewGreen, viewBlue, viewRed, viewPurple) и задайте ограничения, как показано ниже.

      • viewGreen : 1. top to viewYellow 0px 2. leading trailing to mainView as 0pxand 3. height 150px.
      • viewBlue : 1. top to viewGreen 0px 2. leading trailing to mainView as 0pxand 3. height 80px.
      • viewBlue : 1. top to viewGreen 0px 2. leading trailing to mainView as 0pxand 3. height 80px.
      • viewRed : 1. top to viewBlue 0px 2. leading trailing to mainView as 0pxand 3. height 140px.
      • viewPurple : 1. top to viewRed 0px 2. leading trailing to mainView as 0pxand 3. height 128px. 4. bottom to mainView 0px.

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

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

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

Не беспокойтесь о viewPurple, так как он мало отображается в UI, но доступен в иерархии. это scrollView и это очень безопасно. Видеть

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

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

Важно: как рассчитывается высота прокрутки

Когда вы устанавливаете ограничение каждого вида с ограничением сверху, снизу и по высоте на mainView, поэтому высота mainView рассчитывается по следующему уравнению

mainView.height = viewYellow.top + viewYellow.height + .... for all view + viewPurple.bottom

а высота scrollView будет рассчитываться следующим образом:

scrollView.height = mainView.height

Однако каждый вид имеет постоянную высоту, поэтому высота вращения будет одинаковой.

Окончательный результат

портрет

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

Пейзаж

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

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

person dahiya_boy    schedule 09.02.2017
comment
Спасибо за Ваш ответ; однако у меня есть существующее приложение, которое обрабатывается немного иначе, чем то, что вы написали выше. Я уже знал об этом. - person SpokaneDude; 09.02.2017

Ни один из ответов не решил проблему изменения существующего приложения, поэтому я обратился в службу технической поддержки Apple. Они тоже не решили эту проблему, а дали мне несколько документов для просмотра. @Aragunz, вероятно, подошел ближе всего, предположив, что это была / есть проблема в XCode 8. Мой единственный оставшийся вариант - переписать раскадровку с нуля, сохранив существующие классы.

person SpokaneDude    schedule 09.02.2017

Выберите Сведения о книге UIViewController в раскадровке, а затем просто выберите корневой вид. Удалите его, а затем перетащите UIScrollView на свой UIViewController. Теперь ваше корневое представление должно быть UIScrollView

Примечание. Лично я предпочитаю следующую иерархию представлений:

|---UIView
     |---UIScrollView
         |---UIView //(to act as a container)
              |---UIView
              |---UIView
              |---UIView
              |---UIView

Позволяет вам довольно легко масштабировать приложение по мере необходимости, а также позволяет autoLayout довольно легко управлять настройкой размера содержимого вашего UIScrollView

person Rikh    schedule 31.01.2017
comment
НЕТ, это не работает... прокрутка не прокручивается; происхождение равно 0,0, а размер такой же, как и представление. и как мне создать иерархию представлений, показанную выше? - person SpokaneDude; 01.02.2017