Автоматическое изменение размера строки меток в Xcode дает неожиданные результаты

У меня возникла проблема с использованием автоматического изменения размера для макета ряда меток.

См. изображение ниже.

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

Я хочу, чтобы первая метка занимала всю ширину. Метка с именем «Широта:» будет узкой, постоянной ширины, выровненной по левому краю.

Метка с именем «Lon:» будет узкой, постоянной ширины, выровненной горизонтально по центру.

Метки «55.000» и «-95.000» будут иметь переменную ширину, в основном заполняя пространство между краями дисплея и другими метками («Широта:» и «Долгота:»).

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

Любая помощь будет принята с благодарностью.

Использование универсального приложения iOS в Xcode 9.2


person Guy Fisher    schedule 24.03.2018    source источник
comment
Выложи фото своих ограничений. Почему вы используете 4 ярлыка вместо 2? Почему бы просто не указать в тексте метки Lat:? Вы знаете, что такое stackView?   -  person DoesData    schedule 25.03.2018
comment
Скриншоты ограничений показаны на снимке экрана выше. Узкие метки остаются Lat: и Long:. Те, что 55.0000 и -95.0000, рассчитываются в приложении. Да, я знаю представление стека, но я хочу, чтобы метки Lat: и Lon: были узкими, а две другие менялись по ширине в зависимости от используемого дисплея и его ориентации.   -  person Guy Fisher    schedule 25.03.2018
comment
Это изображение не дает значения, назначенного ограничениям или приоритету.   -  person DoesData    schedule 25.03.2018
comment
Я не использую ограничения, но использую ограничения автоматического изменения размера.   -  person Guy Fisher    schedule 25.03.2018


Ответы (1)


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

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

ОБНОВЛЕНИЕ: я протестировал его с динамическим изменением размера представления. Вот как это выглядит. Первое изображение является начальным условием с шириной просмотра 300. Второе изображение, когда ширина изменена на 600. Значения внизу - это сначала ширина представления, затем каждый из четырех «сегментов» x позиция и ширина.

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

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

person LGP    schedule 24.03.2018
comment
На самом деле, метка, расположенная горизонтально посередине (темно-зеленая), работает очень хорошо и остается горизонтально в центре дисплея. Две другие метки (светло-зеленая и светло-желтая), похоже, не могут изменить свой размер, сохраняя фиксированное расстояние от средней и крайней левой метки и краев дисплея. - person Guy Fisher; 25.03.2018
comment
Я провел тест, в котором динамически изменял ширину представления, и хотя выглядит так, будто третий элемент прилипает к центру, это не так. Я обновлю свое решение скриншотами этого. - person LGP; 25.03.2018