Xcode 9 - "Ограничения фиксированной ширины могут вызвать обрезку" и другие предупреждения о локализации
Я загрузил новый Xcode и в Interface Builder. У меня много проблем с предупреждениями, которые говорят такие вещи, как:
Ограничения фиксированной ширины могут вызвать обрезку
Он выглядит следующим образом:
![введите описание изображения здесь]()
У меня есть локализация для нескольких языков, и я понимаю предупреждение о том, что на другом языке размер метки может измениться, но у моего приложения нет этой проблемы. Я побежал и протестировал его в Xcode 8 вчера, все было в порядке. Я не хочу тратить часы и часы, добавляя бессмысленные новые ограничения.
Любые предлагаемые решения?
Ответы
Ответ 1
Я получал те же предупреждения даже без нескольких языков в своем приложении, что заставило меня узнать, что происходит на самом деле.,.
Здесь происходит несколько разных вещей. Я смог отключить предупреждения фиксированной ширины в своем приложении, изменив ширину расстояний между объектами от фиксированной ширины до больше или равно или меньше или равно.
Это можно сделать, выбрав объект в построителе интерфейса, перейдя к инспектору размера и изменив его там:
![введите описание изображения здесь]()
Или выберите ограничение из контура документа, перейдите к инспектору размера и измените его там:
![введите описание изображения здесь]()
Что касается предупреждения в верхней части скриншота:
Исправлены основные и конечные ограничения с центральным ограничением вызывать отсечение
Вот скриншот из моего собственного приложения, в котором я получал то же предупреждение:
![введите описание изображения здесь]()
У меня была метка с значком @ , установленным в начало и конец кнопок, но также для выравнивания центра с меткой рейтинга. Когда я удалил ограничение выравнивания по центру, предупреждение исчезло, но я остался с неправильно установленным набором объектов.
Тогда я смирился с тем, что обнял Stack View. Как раздражающе, поскольку это необходимо использовать, когда вы получаете все ограничения и настройки вправо, оно прекрасно и без предупреждений.
Edit
Как Удержание записывается в комментарии, иногда просто добавление >= 0 будет тем, что вам нужно, поскольку вы убедитесь, что два элемента не перекрываются.
Ответ 2
Вы можете попробовать отключить "Respect Language Direction" для каждого ограничения, чтобы отключить предупреждение и посмотреть, поможет ли оно. Выберите ваше ограничение и откройте Атрибуты/Инспектор размера. Пожалуйста, смотрите изображение прилагается.
Если вы не планируете локализовать свое приложение на другие языки, у этого решения не должно быть никаких запасных вариантов. Для локализованных приложений вы должны быть более внимательны к размеру ярлыка и шрифта.
PS Это решение работает для iOS. Для macOS попробуйте> = или <=, чтобы отключить предупреждение.
pps Ярлыки на рисунке ниже гораздо проще создать с помощью свойства AutoLayout и attribuStString для одного UILabel или UITextView с использованием NSMutableAttributedString. Изображение только для демонстрации.
![Disrespect Language Direction]()
Ответ 3
Для локализованных меток и кнопок это предупреждение имеет смысл, и вы должны предоставить необходимые ограничения, чтобы ваши метки не перекрывались. Если они не пересекаются сейчас, они могут в будущем, так что не помешает предоставить ограничения.
Xcode поможет вам автоматически добавить эти ограничения:
В схеме документа вашей раскадровки нажмите на желтую стрелку и выберите "фиксированный начальный" или "фиксированный трейлинг", в зависимости от того, где находится текст на вашем экране (слева или справа). Это исправит большинство проблем.
![Xcode screenshot]()
Если у вас есть эта проблема с кнопкой без текста (только изображение), попробуйте удалить "заголовок по умолчанию", который все еще может быть установлен для кнопки:
![Xcode screenshot]()
Ответ 4
С помощью Labels
вы можете установить Lines
is 0
и Autoshrink
свойства Minimum Font Size
, чтобы удалить предупреждения Fixed Width Constraints May Cause Clipping
, например:
![введите описание изображения здесь]()
Ответ 5
Еще одно быстрое решение!
Для UIButton, изменив заголовок с обычного на атрибутный текст, также решил мою проблему:
![enter image description here]()
Ответ 6
Swift 4, Xcode 9.1:
Об этой проблеме, я думаю, что ваш объект не знает, какова его правильная центральная позиция в контексте этого супервизора, и большую часть времени удаляет, больше или другие параметры управления/не работают правильно. Во-первых, вы должны проверить правильные ограничения своего супервизора.
Если ваш супервизор /s правильно настроен, вы можете попытаться "объяснить" вашему объекту, что является правильной позицией в представлении, установив ограничение "горизонтально в контейнере" :
![введите описание изображения здесь]()
Ответ 7
Я знаю, что этот вопрос уже был дан ответ, но то, что я сделал, чтобы исправить эту ошибку, в моем случае состояло в том, чтобы добавить свойство "Соотношение сторон", а затем устранить ограничение ширины или высоты, которое получилось очень хорошо, и было меньше усилий, и я удалось сохранить один и тот же результат и адаптировать мой вид для разных устройств.
Ответ 8
У меня была та же проблема, но когда я перехожу к >=
, она автоматически устанавливает константу в 0
, если я выбираю 60
, например, предупреждение появляется снова. Таким образом, я был в цикле с проблемой.
Я мог бы исправить вложение моего Label
в View
Editor > Embed In > View
В Label
я установил Top
, Bottom
, Leading
и Trailing
с помощью constant = 0
![ограничения]()
В View
я установил constraints
, который я ожидал раньше.
Ответ 9
У меня была та же проблема при переходе на Xcode 9 и был найден подход, который полезен для определенных типов макетов. В моем случае мне нужен заголовок таблицы, в котором два столбца (UILabels) имеют фиксированную ширину, а другая - переменной ширины. Независимо от того, как я задал ширину столбцов (включая использование ограничений, превышающих или равных, а не равных и т.д.), Я продолжал получать предупреждение о возможном отсечении. В моем случае я хотел, чтобы столбец ширины переменной (UILabel) был при необходимости скопирован. Я мог бы просто проигнорировать это предупреждение, но не люблю это делать.
Подход, который работал здесь, заключался в создании UIView с соответствующими ограничениями размера и встраивании UILabel в качестве поднабора в UIView. Затем при необходимости происходит усечение, и я не получаю предупреждения. Это работает независимо от того, находится ли UIView/embedded UILabel в StackView или нет.
Это по существу тот же подход, что и Haroldo Gondim, но здесь вы можете видеть, что он также работает с StackView или без него.
На следующем рисунке показан подход, с и без StackView. "SpacerName" - это переменная ширина UIView, содержащая метку, а "SpacerPD" - это номер с фиксированной шириной 80. [Цвета не значимы; просто чтобы показать, где находятся представления.]
![введите описание изображения здесь]()
Ответ 10
Если вам нужно фиксированное ограничение ширины для кнопки, просто установите приоритет ограничения ширины на 700
.
Ответ 11
Как вы можете видеть на изображении ниже, у меня была ошибка "Исправлены ограничения ширины, которые могут вызвать обрезку", потому что, хотя я установил, что текстовое поле было вертикально центрировано, а мой ярлык имеет ограничение по левому краю, у меня не было определял ограничение для текстового поля относительно метки, поэтому XCode предупреждал меня, что текстовое поле может закрепить (будет отображаться выше) ярлык.
![введите описание изображения здесь]()
После добавления левого ограничения в текстовое поле, чтобы всегда оставаться на некотором расстоянии от метки, ошибка считалась решенной XCode, и она больше не беспокоила меня с предупреждением ограничения.
Ответ 12
У меня была аналогичная проблема при попытке кнопки с теми же paddings с краями супер-представления.
![Случай с ошибкой]()
В результате я использовал ограничение horizontal center
и equal widths
для super view
.
![Мое решение]()
Ответ 13
Чтобы исправить ошибку: фиксированные ограничения ширины могут привести к обрезанию "и другая локализация. Вам необходимо выбрать вид/объект, перейти к" Показать инспектор размера ", найти ограничение ширины и установить для константы значение" больше "или" равно ":
Исправить ошибку: отсутствует ограничение Leading/Trailing, что может привести к перекрытию с другими представлениями
Это означает, что Xcode вида/объекта, на который жалуется, пропускает ведущее или конечное ограничение для соседнего представления.
Удерживая элемент управления, перетащите курсор на ближайший вид/объект
Добавить ведущее или конечное ограничение
![Leading/Trailing Constraint]()
Ответ 14
Для UIButton, если вы ХОРОШО по дизайну, чтобы обрезать текст, используйте этот параметр, чтобы отключить предупреждение:
![enter image description here]()