Я скачал новый XCode, и в Интерфейсном Разработчике у меня есть куча проблем с предупреждениями, которые говорят вещи как:
Ограничения фиксированной ширины могут вызвать ограничение
Это выглядит так:
У меня есть локализация для нескольких языков, и я понимаю предупреждение о том, что на другом языке размер метки может измениться, но в моем приложении такой проблемы нет. Я запускал и тестировал его в Xcode 8 вчера, все было хорошо. Я не хочу тратить часы и часы, добавляя бессмысленные новые ограничения.
Любые предлагаемые решения?
Ответы:
Я получал те же предупреждения даже без нескольких языков в моем приложении , что привело меня к выяснению того, что на самом деле происходит. , ,
Здесь происходит несколько разных вещей. Мне удалось отключить предупреждения фиксированной ширины в моем собственном приложении, изменив ширину промежутков между объектами с фиксированной ширины на большую или равную или меньшую или равную .
Это можно сделать, выбрав объект в конструкторе интерфейса, перейдя в инспектор размера и изменив его там:
Или выберите ограничение в структуре документа, перейдите в инспектор размера и измените его там:
Насколько предупреждение в верхней части вашего скриншота:
Вот скриншот из моего собственного приложения, в котором я получал точно такое же предупреждение:
У меня была метка со знаком @, установленная на ведущие и тянущиеся к кнопкам, но также для выравнивания центра с меткой рейтинга . После того как я удалил ограничение выравнивания по центру , предупреждение исчезло, но у меня остался неправильный набор объектов.
Именно тогда я смирился с тем, чтобы принять Stack View . Как бы ни раздражало использование, когда вы правильно поняли все ограничения и настройки, оно выглядит красиво и без предупреждений.
редактировать
Как пишет Repose в комментариях, иногда вам просто нужно добавить> = 0, так как вы убедитесь, что два элемента не перекрываются.
источник
Вы можете попробовать отключить «Respect Language Direction» для каждого ограничения, чтобы отключить предупреждение и посмотреть, поможет ли оно. Выберите ваше ограничение и откройте Атрибуты / Инспектор размера. Пожалуйста, смотрите изображение прилагается.
Если вы не планируете локализовать свое приложение на другие языки, у этого решения не должно быть никаких запасных вариантов. Для локализованных приложений вы должны быть более внимательны к размеру ярлыка и шрифта.
PS Это решение работает для iOS. Для macOS попробуйте> = или <=, чтобы отключить предупреждение.
pps Ярлыки на рисунке ниже гораздо проще создать с помощью свойства AutoLayout и attribuStString для отдельного UILabel или UITextView с использованием NSMutableAttributedString. Изображение только для демонстрации.
источник
Для локализованных меток и кнопок это предупреждение имеет смысл, и вы должны предоставить необходимые ограничения, чтобы ваши метки не перекрывались. Если они не пересекаются сейчас, они могут в будущем, так что не помешает предоставить ограничения.
Xcode поможет вам автоматически добавить эти ограничения:
В схеме документа вашей раскадровки нажмите на желтую стрелку и выберите «фиксированный начальный» или «фиксированный трейлинг», в зависимости от того, где находится текст на вашем экране (слева или справа). Это исправит большинство проблем.
Если у вас есть эта проблема с кнопкой без текста (только изображение), попробуйте удалить «заголовок по умолчанию», который все еще может быть установлен для кнопки:
источник
UIButton
кStoryboard
, тоdefault button
название будетbutton
.С помощью
Labels
вы можете установитьLines
is0
иAutoshrink
свойства isMinimum Font Size
для удаленияFixed Width Constraints May Cause Clipping
предупреждений, например так:источник
Еще одно быстрое решение!
Для UIButton, изменив заголовок с обычного на атрибутный текст, также решил мою проблему:
источник
Я знаю, что на этот вопрос уже был дан ответ, но что я сделал, чтобы исправить эту ошибку в моем случае, так это добавить свойство «Соотношение сторон», а затем устранить ограничение ширины или высоты, это работало довольно хорошо и потребовало меньше усилий, и мне удалось сохранить один и тот же вывод и адаптировать мой взгляд для разных устройств.
источник
Swift 4, Xcode 9.1:
Об этой проблеме я думаю, что ваш объект не знает, какова его правильная позиция в центре в контексте его суперпредставления , и использование удаленных , больших или других начальных / растягивающих настроек в большинстве случаев не работает правильно. Во-первых, вы должны проверить правильные ограничения вашего суперпредставления.
Если ваши суперпредставления установлены правильно, вы можете попытаться «объяснить» вашему объекту, какова правильная позиция в представлении, установив ограничение «горизонтально в контейнере» :
источник
Если вам нужно фиксированное ограничение ширины для кнопки, просто установите приоритет ограничения ширины
700
.источник
У меня была та же проблема, но при переходе на
>=
нее автоматически устанавливалась постоянная0
, если я выбираю60
например, , снова появится предупреждение. Так что я был в курсе проблемы.Я мог бы исправить встраивание моего
Label
вView
В
Label
I набореTop
,Bottom
,Leading
иTrailing
сconstant = 0
В
View
я установил ,constraints
что я ожидал , что раньше.источник
У меня была та же проблема при переходе на Xcode 9, и я нашел подход, который полезен для определенных видов макетов. В моем случае я хотел заголовок таблицы, в котором два столбца (UILabels) были фиксированной ширины, а другой - переменной ширины. Независимо от того, как я указывал ширину столбцов (включая использование ограничений больше или равно вместо равных и т. Д.), Я продолжал получать предупреждение о возможном отсечении. В моем случае я хотел, чтобы столбец переменной ширины (UILabel) обрезал при необходимости. Я мог бы просто проигнорировать предупреждение, но мне не нравится это делать.
Подход, который работал здесь, состоял в том, чтобы создать UIView с соответствующими ограничениями размера и внедрить UILabel в качестве подпредставления в UIView. Затем происходит усечение, если это необходимо, и я не получаю предупреждения. Это работает независимо от того, находится ли UIView / встроенная UILabel в StackView или нет.
По сути, это тот же подход, что и у Haroldo Gondim, но здесь вы можете увидеть, что он также работает с или без StackView.
На следующем рисунке показан подход с использованием и без использования StackView. «SpacerName» - это переменная ширина UIView, содержащая метку, а «SpacerPD» - это метка с фиксированной шириной 80. [Цвета не имеют значения; просто чтобы показать, где вид.]
источник
Как вы можете видеть на изображении ниже, у меня возникла ошибка «Фиксированные ограничения ширины могут вызвать отсечение», потому что, хотя я установил текстовое поле вертикально по центру, а в метке - ограничение левого поля, я не определил ограничение для текстового поля относительно метки, поэтому XCode предупредил меня, что текстовое поле может обрезать (быть отображено выше) метку.
После добавления левого ограничения в текстовое поле, чтобы всегда оставаться на некотором расстоянии от метки, ошибка считалась исправленной XCode, и это больше не беспокоило меня предупреждением об ограничении.
источник
У меня была похожая проблема при попытке получить кнопку с такими же отступами от краев супер просмотра.
Я закончил тем, что использовал
horizontal center
ограничение иequal widths
ограничение кsuper view
.источник
Чтобы исправить ошибку : фиксированные ограничения ширины могут вызвать обрезку »и другую локализацию. Вам необходимо выбрать вид / объект, перейти к« Показать инспектор размера », найти ограничение ширины и установить для константы значение« больше »или« равно »:
Чтобы исправить ошибку : отсутствует ограничение Leading / Trailing, что может привести к перекрытию с другими представлениями
Это означает, что Xcode вида / объекта, на который жалуется, пропускает ведущее или конечное ограничение для соседнего представления.
Удерживая элемент управления, перетащите курсор на ближайший вид / объект
Добавить ведущее или конечное ограничение
источник