Проблема с автоповоротом iPhone 6 Plus

Я столкнулся со странной проблемой автоповорота только на iPhone 6 plus (симулятор и реальное устройство).

Я создал новый проект Xcode с одним представлением. И все, что у него есть, это некоторые элементы пользовательского интерфейса в начальном контроллере представления (с соответствующими ограничениями). Вот как это выглядит при первоначальном запуске:

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

Но как только я меняю ориентацию устройства, все элементы пользовательского интерфейса исчезают?!?!

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

На других устройствах такого нет.

Что мне здесь не хватает? Очень ценю вашу помощь.


person Myxtic    schedule 31.03.2015    source источник
comment
Вы уверены, что все ваши ограничения действительны и соответствуют размерному классу?   -  person luk2302    schedule 31.03.2015
comment
Это, наверное, все. Позвольте мне взглянуть на это.   -  person Myxtic    schedule 31.03.2015
comment
Вот оно! Я использовал компактный/любой класс размера. Как только я воссоздал представление в классе любого/любого размера, проблема была исправлена. Если вы хотите опубликовать свое решение в качестве ответа, я буду рад принять его.   -  person Myxtic    schedule 01.04.2015
comment
Кроме того, связанный с этим вопрос: есть ли простой способ перенести представления из одного класса размеров в другой? Спасибо!   -  person Myxtic    schedule 01.04.2015
comment
Сделаю, как только приду с работы. И я проверю технику миграции...   -  person luk2302    schedule 01.04.2015


Ответы (1)


Что касается первоначального вопроса: ваш класс размера ограничений автоматического макета кажется неправильным. Это приведет к тому, что ваше представление будет отображаться в одной комбинации ширины/высоты просто отлично, а в другой - полностью потерпит неудачу. Проектирование в любом классе размера, отличном от любого/любого, приведет к синей полосе класса размера в нижней части Xcode, указывающей/предупреждающей об этом.

Как правило, вы должны указать ограничения для каждого поддерживаемого класса размеров. Самый простой способ - просто создать свой вид в любом/любом классе. Таким образом, ваш макет будет одинаковым для всех конфигураций. Вы можете изменить указанные ограничения только для одного класса размера, а также просто выбрать этот класс размера и проверить ограничения представления, включить/отключить их или добавить новые. Они будут установлены только в этом конкретном классе размера. Чтобы просмотреть ограничение, вы можете либо выбрать его в раскадровке, либо дважды щелкнуть по нему в инспекторе размеров представления, к которому оно принадлежит. Последний раздел в инспекторе размеров ограничения сообщает, в каких классах размеров оно существует.

пример ограничения класса размера

Перенос представления из одного класса размера в другой просто означает изменение этого класса размера для каждого представления и ограничения...

Вручную
Чтобы сделать это, вам нужно добавить размерный класс, на который вы хотите перейти, нажав + рядом с флажком Installed и щелкнув маленький значок x слева от размерного класса, который вы хотите хотите мигрировать из. Если вы хотите перейти на любой/любой, не нажимайте на +, просто установите флажок рядом с Installed. И не забудьте не также изменить класс размера самого объекта представления. Если вы этого не сделаете, представление просто не будет представлено в нужном классе размеров.

Автоматический способ
Это также можно изменить, просмотрев исходный код файла раскадровки. Настройка ограничения может выглядеть так

<variation key="default">
    <mask key="subviews">
        <exclude reference="fTD-HZ-ZT3"/>
    </mask>
    <mask key="constraints">
        <exclude reference="eyr-oK-LvV"/>
    </mask>
</variation>
<variation key="heightClass=compact-widthClass=regular">
    <mask key="subviews">
        <include reference="fTD-HZ-ZT3"/>
    </mask>
    <mask key="constraints">
        <include reference="eyr-oK-LvV"/>
    </mask>
</variation>

Атрибут key в элементе варианта, по-видимому, указывает размерный класс. Default означает любой/любой. Было бы намного проще просто найти и заменить все вхождения класса размера, из которого вы хотите перейти, классом размера, в который вы хотите перейти. Если вы переходите с класса по умолчанию или на него, это немного сложнее, поскольку вам нужно изменить exclude на include и наоборот. Затем вам нужно будет добавить/удалить полный раздел класса размера, в который/из которого вы мигрируете. Немного больше работы, но все же намного проще, чем делать это вручную.
Однако вам следует быть осторожным, если ваше представление уже содержит спецификации классов размеров для нескольких классов размеров, чтобы изменить только правильные.

person luk2302    schedule 01.04.2015
comment
Большое спасибо за подробное объяснение. Я попробую! - person Myxtic; 02.04.2015