Swift Autolayout не работает в Xcode 9.3 - PullRequest
0 голосов
/ 20 мая 2018

Здесь у меня есть две метки для отображения в Xcode.Если я не добавлю никаких ограничений, это будет хорошо.

без ограничений

without constraint

показано в симуляторе

shown in simulator

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

Например, если я установил постоянный начальный пробел на границе,

только одно ограничение, ведущее пространство к контенту,значение 15

only one constraint, leading space to content, value 15,

моя метка прыгнула к границе.

перейти к границе.То же самое произошло с текстовым полем

jump to border. The same thing happened to textfield

Это сбило меня с толку почти на три дня.Как я могу заставить это работать?

ОБНОВЛЕНИЕ:

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

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

текстовое поле с надписью

Ответы [ 3 ]

0 голосов
/ 20 мая 2018

Вы должны указать положение x и y метки, используя ограничения.В этом случае у вас есть значение x, но нет значения для y.Например: если вы хотите центрировать метку в ячейке, вы можете выбрать метку, затем нажать кнопку Align в правом нижнем углу раскадровки и выбрать Vertically in Container.

0 голосов
/ 20 мая 2018

В целом для каждого рассматриваемого элемента необходимо 4 ограничения.Ширина, высота, х и у.Некоторым элементам нужны только x и y, такие как метки, переключатель, ... но некоторым другим нужны все 4. В вашем случае вам нужно определить x и y для вашей метки.

Я бы предложил посмотреть этот YouTubeучебник, чтобы вы лучше понимали автоматическую разметку в X-Code:

https://youtu.be/izES1zQjRUU

0 голосов
/ 20 мая 2018

Когда у вас нет ограничений, iOS использует нечто, известное под маской авторазмера, чтобы создавать для вас ограничения во время выполнения, блокируя ваши представления на месте, где бы они ни находились в Интерфейсном Разработчике.Эти ограничения не будут работать хорошо для разных размеров контента или разных устройств, поэтому вы всегда должны полностью ограничивать свой пользовательский интерфейс.

Когда вы добавили единственное ограничение, Interface Builder сказал вам, что ваш интерфейс не был должным образом ограничен (красная стрелка рядом с вашим контроллером представления) и даст вам указания, если вы посмотрите на этот контент.Однако запуск приложения с единственным ограничением на эту метку означал, что система не применяла маску автоматического изменения размера, как обычно, и система макета фактически просто устанавливала все остальные значения на ноль во время выполнения.Это включает height и width метки, а также ее позиции x и y.С нулями для всех этих значений, то, что вы видите здесь, это содержимое вашей метки, отображаемой в 0,0, с меткой, которая имеет 0 высоту и ширину.Однако при значении clipsToBounds по умолчанию false содержимое метки по-прежнему отображается, и поэтому отображается так, как вы видите.

tl; dr: вам нужно ограничить весь пользовательский интерфейс, как пытался Интерфейсный Разработчиксказать вам.

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