Xcode 9- "фиксированные ограничения ширины могут привести к обрезке" и другие предупреждения локализации
Я загрузил новый Xcode и в Interface Builder у меня возникли тонны проблем с предупреждениями, которые говорят такие вещи, как:
Фиксированные Ограничения Ширины Могут Привести К Отсечению
Это выглядит так:

У меня есть локализация для нескольких языков, и я понимаю предупреждение о том, что на другом языке размер метки может измениться, но у моего приложения нет этой проблемы. Я запустил и протестировал его в Xcode 8 вчера, это был хороший. Я не хочу тратить часы и часы, добавляя бессмысленные новые ограничения.
любые предлагаемые решения?
12 ответов:
Я получал те же предупреждения, даже без нескольких языков в моем приложении, что привело меня к выяснению того, что на самом деле происходит. . .
здесь происходит несколько разных вещей. Я смог отключить предупреждения фиксированной ширины в моем собственном приложении, изменив ширина интервалов между объектами от фиксированной ширины до больше или равно или меньше или равно.
Это можно сделать с помощью выбрав объект в interface builder, перейдите в Инспектор размеров и измените его там:
или выберите ограничение из структуры документа, перейдите в Инспектор размеров и измените его там:
Что касается предупреждения в верхней части экрана:
фиксированные начальные и конечные ограничения с ограничением центра может причина отсечения
вот скриншот из моего собственного приложения, в котором я получал точно такое же предупреждение:
У меня был ярлык с @ sign установите для ведущих и конечных кнопок, но также для выравнивания центра с меткой рейтинга. Однажды Я удалено ограничение выравнивания центра, предупреждение исчезло, но я остался с неправильно выложил набор объекты.
именно тогда я смирился с охватить вид стека. Как раздражает, как это использовать, когда вы получаете все ограничения и настройки, он излагает красиво и без предупреждения.
Edit
Как покой пишет в комментариях, иногда просто добавляя >= 0 будет то, что вам нужно, так как вы убедитесь, что два элемента не перекрываются.
вы можете попробовать отключить "уважать направление языка" на основе ограничений, чтобы заставить замолчать предупреждение и посмотреть, поможет ли это. Выберите ограничение и откройте инспектор атрибутов/размеров. Пожалуйста, смотрите изображение прилагается.
p. s.это решение работает для iOS. Для macOS попробуйте > = или
для меток и кнопок, которые локализованы это предупреждение имеет смысл, и вы должны предоставить необходимые ограничения, чтобы ваши метки не перекрывались. Если они не перекрываются сейчас, они могут быть в будущем, поэтому не помешает обеспечить ограничения.
Xcode поможет вам добавить эти ограничения автоматически:
в контуре документа раскадровки нажмите на желтую стрелку и выберите "фиксированный ведущий "или" фиксированный трейлинг", в зависимости от того, где находится текст ваш экран (левый или правый). Это исправит его для большинства проблем.
Если у вас есть эта проблема с кнопка без текста (только изображение), попробуйте удалить "заголовок по умолчанию", который все еще может быть установлен для кнопки:
Я знаю, что на этот вопрос уже был дан ответ, но то, что я сделал, чтобы исправить эту ошибку в моем случае, состояло в том, чтобы добавить свойство "соотношение сторон", а затем устранить ограничение ширины или высоты, это сработало довольно хорошо и было меньше усилий, и мне удалось сохранить тот же выход и адаптировать мое представление для разных устройств.
Swift 4, Xcode 9.1:
об этой проблеме, я думаю, ваш объект Не знаю, что это правильное положение центра в контексте его superview, и через удалить, больше, чем или другие ведущие / trealing настройки в большинстве случаев не работают правильно. Во-первых, вы должны проверить правильные ограничения вашего супервизора.
если ваш superview / s правильно установлен, вы можете попытаться "объяснить" своему объекту, что такое правильное положение в представлении, установив "горизонтально в контейнер" ограничения:
у меня была та же проблема, но когда я меняюсь на
>=он автоматически устанавливает константу в0, Если я выберу60например, предупреждение появляется снова. Так что я был в петле с проблемой.я мог бы исправить встраивание моего
LabelнаViewEditor > Embed In > Viewна
LabelЯTop,Bottom,LeadingиTrailingСconstant = 0на
Viewя поставилconstraintsчто я был ожидал раньше.
У меня была такая же проблема при переходе на Xcode 9 и нашел подход, который полезен для некоторых видов макетов. В моем случае мне нужен заголовок таблицы, в котором два столбца (UILabels) имеют фиксированную ширину, а другой-переменную ширину. Независимо от того, как я указал ширину столбца (включая использование ограничений больше или равно вместо равного и т. д.), Я продолжал получать предупреждение о возможной подрезки. В моем случае я хотел, чтобы столбец переменной ширины (UILabel) обрезался при необходимости. Я мог бы просто проигнорировать предупреждение, но не нравится это делать.
подход, который работал здесь, заключался в создании UIView с соответствующими ограничениями размера и внедрении UILabel в качестве подвида в UIView. Затем усечение происходит, если это необходимо, и я не получаю предупреждения. Это работает независимо от того, находится ли UIView/embedded UILabel в StackView или нет.
Это по сути тот же подход, что Haroldo Gondim но вы можете видеть, он также работает с или без StackView.
на следующем рисунке показан подход, С и без StackView. "SpacerName" - это переменная ширина UIView, содержащая метку, а" SpacerPD " - одна с фиксированной шириной 80. [Цвета не имеют значения; просто там, чтобы показать, где находятся виды.]
Как вы можете видеть на изображении ниже, у меня была ошибка "Фиксированные Ограничения Ширины Могут Привести К Отсечению" потому что, хотя я установил свое текстовое поле вертикально центрированным, а моя метка имела ограничение левого поля, я не определил ограничение для текстового поля по отношению к метке, поэтому XCode предупреждал меня, что текстовое поле может обрезать (быть отображено выше) метку.
после добавления левого ограничения к текстовое поле, чтобы всегда оставаться на некотором расстоянии от метки, ошибка считалась решенной XCode, и это больше не беспокоило меня предупреждением об ограничении.
Чтобы Исправить Ошибку: фиксированные ограничения ширины могут привести к отсечению " и другой локализации Вам нужно выбрать вид / объект, перейти в "показать инспектор размеров", найти ограничение ширины и установить константу на большее или равное:
![]()
Чтобы Исправить Ошибку: отсутствует ограничение Leading/Trailing, которое может привести к перекрытию с другими представлениямиЭто означает, что представление/объект Xcode жалуется о, отсутствует начальное или конечное ограничение для соседнего представления.
удерживая элемент управления, перетащите его на ближайший вид / объект

















Comments