Xcode 6 Storyboard неправильного размера?


139

Создал новый проект с нуля в Swift в Xcode 6 (Beta 1) и заметил странное поведение с раскадровками и результатами, которые я просматриваю.

Я создал простой интерфейс (как показано ниже) с включенными свойствами View Controller. Когда я запускаю это в симуляторе, я ожидал, что «Hello, World» будет центральным в пользовательском интерфейсе - однако кажется, что этот «квадрат» просто вписывается в экран iPhone и, следовательно, отображается неправильное представление (см. Ниже ).

У меня вопрос: кто-нибудь еще видел такое поведение и как они его исправили?

Благодарность!

Вид из редактора раскадровки

Инспектор атрибутов

Инспектор размеров

Выход симулятора


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

8
Советы: Используя помощник редактора> автоматический> предварительный просмотр, вы сможете просмотреть предварительный просмотр экрана со всеми размерами экрана
Франческу

Ответы:


81

Хотя ответ Асифа Билала представляет собой более простое решение, которое не включает классы размера (которые были введены в iOS 8.), настоятельно рекомендуется вам привыкнуть к классам размера, поскольку они являются будущим, и вы в конечном итоге все равно прыгнете в некоторые точка ".


Вероятно, вы не добавили ограничения макета.

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

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

В этом меню добавьте ширину и высоту (она НЕ должна быть такой же, как у меня), установив соответствующие флажки и нажав кнопку «Добавить ограничения». Затем, удерживая нажатой клавишу Control, перетащите метку в главное представление, а затем, когда вы отмените щелчок, у вас должны быть параметры для центрирования по горизонтали и вертикали в контейнере. Добавьте оба, и вы должны быть настроены.


1
Отлично - у меня это отлично сработало - Спасибо за вашу помощь (приму ваш ответ, когда таймер будет снят)
Candyfloss

1
Добро пожаловать. Это поведение по умолчанию с автоматическим размещением, которое теперь по умолчанию включено. Помните, что из-за возможных разных размеров / макетов экрана должен быть способ расчета, где представление будет расположено относительно его родителя, и автоматическое размещение устраняет эту проблему. когда вы не добавляете эти ограничения, view создает их автоматически во время выполнения, но относительно верхнего левого угла. Если вам нужно что-то еще (вам почти всегда нужно что-то еще), вам нужно явно указать ограничения.
Джан Пойразоглу 08

4
Обратите внимание, что перетаскивание элемента управления (которое может быть неудобным) не требуется. Кнопка слева от кнопки, выбранной на этом изображении, открывает меню, которое позволяет вам закрепить горизонтальный и вертикальный центры.
jrturton

Вы правы ... Я просто привык к перетаскиванию с контролем, поэтому так и сказал.
Джан Пойразоглу

@ CanPoyrazoğlu - Вы упоминаете "Выберите свой лейбл". Какой лейбл? У меня такая же проблема с новым проектом iPhone, в котором у меня нет ярлыков или других элементов пользовательского интерфейса. Мой первый проект в Xcode 6 с использованием Objective C.
rattletrap99

253

Выполните следующие действия, чтобы решить проблему

В раскадровке выберите любое представление, затем перейдите в Инспектор файлов. Снимите флажок «Использовать классы размеров», вам будет предложено сохранить данные классов размеров для: iPhone / iPad. Затем нажмите кнопку «Отключить классы размеров». Это приведет к увеличению размера представления раскадровки с выбранным устройством.


8
Это правильный ответ, если вы получаете контроллер представления 600x600, когда вам, например, нужен стандартный контроллер представления размера iPhone.
Fraggle

5
Это должен быть правильный ответ (по крайней мере, для тех, кто работает только на неуниверсальной платформе)
Raptor

36
Я не знаю, почему люди отметили это как правильный ответ ... первый - это то, как это нужно делать ... Если вам не нравятся ограничения макета, вы идете в обратном направлении ... Apple использует хороший способ разработки для всех размеров iPhone и iPad, и вы просто хотите вернуться к старому? Потому что вы не можете себе позволить обновляться? Никогда не голосовал против, но кажется, что этот ответ сбивает людей с толку и заставляет затем использовать старый подход (который будет устаревшим) вместо того, чтобы побуждать затем использовать новый материал ...
Рафаэль Эйрес

3
Лучший ответ для всех, кто привык к раскадровке iPhone / iPad
mamarx

3
Используйте ограничения макета ... Apple делает это так же, как работает Android. Представление не имеет формы ... Иногда это может быть неприятно, но если вы увеличите размер, ваше приложение будет плохо выглядеть на устройствах разных размеров. Если вы хотите, чтобы кнопка отображалась в правом нижнем углу, просто создайте для нее 2 ограничения и запретите ... без выбора X или Y. Все установит Движок. Используйте внутренние размеры. Использовать свое воображение. Используйте реляционные ограничения. Узнай это дерьмо.
Рафаэль Эйрес

18

Если вы используете Xcode 6 и разрабатываете для iOS 8, ни одно из этих решений не является правильным. Чтобы правильно настроить размеры представлений только для iPhone, не отключайте классы размеров, не отключайте предполагаемые метрики и не устанавливайте ограничения (пока). Вместо этого используйте элемент управления size class, который представляет собой текстовую кнопку, которую легко пропустить в нижней части Interface Builder, которая изначально читается как «wAny hAny».

Нажмите кнопку и выберите Компактная ширина, Обычная высота. Это изменит размер ваших представлений и охватит все портретные ориентации iPhone. Документы Apple здесь: https://developer.apple.com/library/ios/recipes/xcode_help-IB_adaptive_sizes/chapters/SelectingASizeClass.html или выполните поиск по «Выбор класса размера в Interface Builder»


Я считаю полезным прочитать всю справку по проектированию классов размеров в вашей ссылке, то есть от « О проектировании для классов с несколькими размерами» до « Развертывание приложения с классами размеров в более ранних версиях iOS» .
Франклин Ю

Это отличное решение, если вы хотите сохранить автоматический макет, но хотите, чтобы виды раскадровки отображались как альбомные или портретные, а не квадратные.
Stephenspann

5

В раскадровке выберите свой ViewController и перейдите в Инспектор атрибутов. В самом верху, в разделе Simulated Metrics, у вас есть свойства Size и Orientation, для которых установлено значение Inferred. Измените их на желаемые значения.

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


5

У меня была эта проблема в xcode 6, и есть способ разрешить конфликты изменения размера. Если вы выберете вид, внизу вы увидите значок, который выглядит как | -Δ- |. Если вы нажмете на нее, ваш проект будет изменять размер для разных устройств.


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

3

Перейдите к инспектору атрибутов (правый верхний угол) в Simulated Metrics, у которого есть свойства Size, Orientation, Status Bar, Top Bar, Bottom Bar. Для SIZE измените Inferred -> Freeform.


+1 @Rachel благодарит вас за этот полезный небольшой совет о моделируемых показателей -> Размер: «Произвольная форма» (по-видимому, «включить нестандартный размер для многоразового xib, поддерживаемого настраиваемым представлением»).
cweekly

3

На странице раскадровки перейдите в Инспектор файлов и снимите флажок «Использовать классы размера». Это должно уменьшить ваш контроллер представления до обычного размера iPhone, с которым вы были знакомы. Обратите внимание, что использование «классов размеров» позволит вам разрабатывать свой проект на многих устройствах. Как только вы снимете этот флажок, Xcode выдаст вам предупреждающий диалог, как показано ниже. Это должно быть самоочевидным.

«Отключение классов размеров ограничит этот документ хранением данных для одного семейства устройств. Данные для класса размера, наилучшим образом представляющего целевое устройство, будут сохранены, а все другие данные будут удалены. Кроме того, сегменты будут преобразованы в их не -адаптивные эквиваленты ".


3

Для любого, кто использует XCode 7, очень легко разработать дизайн для определенного размера устройства (вместо квадратного холста по умолчанию).

В Интерфейсном Разработчике выберите свой ViewController или Scene в левом меню. Затем в разделе Show the Attributes Inspectorперейдите к Simulated Metricsи выберите желаемое Sizeиз раскрывающегося меню.


Это позволит вам создавать раскадровку только для этого устройства. Когда вы запускаете приложение, его дизайн может сильно отличаться для разных размеров экрана.
Joey Tawadrous

@JoeyTawadrous Точно. Но он отвечает на заданный вопрос :)
Priest

2

Вы, вероятно, должны использовать «Устранение проблем с автоматическим макетом» (нижний правый значок треугольника в представлении раскадровки) для добавления / сброса предлагаемых ограничений (Xcode 6.0.1).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.