Xcode 9 - "фиксированные ограничения ширины могут вызвать отсечение" и другие предупреждения о локализации

Я загрузил новый Xcode и в Interface Builder у меня куча проблем с предупреждениями, которые говорят такие вещи, как:

Фиксированные Ограничения Ширины Могут Вызвать Отсечение

Это выглядит так:

enter image description here

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

любые предлагаемые решения?

12 ответов


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

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

Это можно сделать выбрав объект в interface builder, перейдите в Инспектор размеров и измените его там:

enter image description here


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

enter image description here



Что касается предупреждения в верхней части экрана:

фиксированные ведущие и конечные ограничения с ограничением центра может причина отсечения

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

enter image description here

У меня был ярлык со знаком@!--1-->установить на ведущие и конечные кнопки, а также выровнять центр с меткой рейтинга. Однажды Я ... --1-->удалено ограничение выравнивания центра, предупреждение исчезло, но я остался с неправильно выложил набор объекты.

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


редактировать

As покой пишет в комментариях, иногда просто добавляет >= 0 будет то, что вам нужно, так как вы убедитесь, что два элемента не перекрываются.


вы можете попробовать отключить "Respect Language Direction" на основе ограничения, чтобы заставить замолчать предупреждение и посмотреть, помогает ли оно. Выберите ограничение и откройте инспектор атрибутов/размеров. Пожалуйста, см. прикрепленную картинку.

p.s. Это решение работает для iOS. Для macOS попробуйте > = или

Disrespect Language Direction


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

Xcode поможет вам добавить эти ограничения автоматически:

в контуре документа раскадровки нажмите на желтую стрелку и выберите "фиксированный ведущий" или "фиксированный трейлинг", в зависимости от того, где находится текст ваш экран (слева или справа). Это исправит его для большинства проблем.

Image

Если у вас есть эта проблема с кнопка без текста (только изображение), попробуйте удалить "заголовок по умолчанию", который все еще может быть установлен для кнопки:

Image


С Labels, вы можете установить Lines is 0 и Autoshrink свойства Minimum Font Size удалить Fixed Width Constraints May Cause Clipping предупреждения, как это:

enter image description here


для UIButton, изменив заголовок с простого на приписываемый текст, также решил мою проблему: -

enter image description here


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


Swift 4, Xcode 9.1:

об этом вопросе, я думаю, ваш объект Не знаю, что это правильное положение центра в контексте его superview, и через удалить, больше, чем или другие ведущие / trealing настройки в большинстве случаев не работают правильно. Во-первых, вы должны проверить правильные ограничения вашего superview.

если ваш superview / s правильно настроен, вы можете попытаться "объяснить" своему объекту, что такое правильное положение в представлении, установив "горизонтально в контейнер" ограничения:

enter image description here


у меня была такая же проблема, но когда я меняя >= он автоматически устанавливает константу в 0, Если я выберу 60 например, предупреждение появляется снова. Так что я был в курсе проблемы.

я мог бы исправить встраивание моего Label на View

Editor > Embed In > View

на Label Я Top, Bottom, Leading и Trailing С constant = 0

constraints

на View я поставил constraints что я был ожидал раньше.


У меня была та же проблема при переходе на Xcode 9 и нашел подход, который полезен для определенных видов макетов. В моем случае мне нужен заголовок таблицы, в котором два столбца (UILabels) имеют фиксированную ширину, а другой-переменную ширину. Независимо от того, как я задал ширину столбца (включая использование ограничений больше или равно вместо равного и т. д.), Я продолжал получать предупреждение о возможной подрезки. В моем случае я хотел, чтобы столбец переменной ширины (UILabel) был обрезан, если это необходимо. Я мог бы просто проигнорировать предупреждение, но мне это не нравится.

подход, который работал здесь, заключался в создании UIView с соответствующими ограничениями размера и встраивании UILabel в качестве подвида в UIView. Затем при необходимости происходит усечение, и я не получаю предупреждения. Это работает независимо от того, находится ли UIView/embedded UILabel в StackView или нет.

Это по сути тот же подход, что Haroldo Gondim но вы можете видеть, он также работает с или без StackView.

на следующем рисунке показан подход, С и без StackView. "SpacerName" - переменная ширина UIView, содержащая метку, а" SpacerPD " - одна с фиксированной шириной 80. [Цвета не имеют значения; просто там, чтобы показать, где находятся виды.]

enter image description here


Как вы можете видеть на изображении ниже, у меня была ошибка "Фиксированные Ограничения Ширины Могут Вызвать Отсечение" потому что, хотя я установил, что мое текстовое поле вертикально центрировано, а моя метка имеет ограничение левого поля, я не определил ограничение для текстового поля по отношению к метке, поэтому XCode предупреждал меня, что текстовое поле может обрезать (быть отображено выше) метку.

enter image description here

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


у меня была аналогичная проблема при попытке иметь кнопку с теми же прокладками с краев супер-вида.

Error case

Я закончил с использованием horizontal center ограничение и equal widths ограничения super view.

My solution


Чтобы Исправить Ошибку: фиксированные ограничения ширины могут вызвать отсечение " и другую локализацию Вам нужно выбрать вид / объект, перейти в "показать инспектор размеров", найти ограничение ширины и установить константу больше или равна:

Size Inspector

Чтобы Исправить Ошибку: отсутствует ограничение Leading/Trailing, которое может привести к перекрытию с другими представлениями

Это означает, что view/object Xcode жалуется о, отсутствует ведущее или конечное ограничение для соседнего представления.

удерживая управление, перетащите его на ближайший вид / объект

Contrl + PressClick

Добавить ведущее или конечное ограничение

Leading/Trailing Constraint