Xcode 9 - "Обмеження з фіксованою шириною можуть спричинити відсікання" та інші попередження щодо локалізації


147

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

Обмеження з фіксованою шириною можуть спричинити відсікання

Це виглядає приблизно так:

введіть тут опис зображення

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

Будь-які запропоновані рішення?


Я пропоную вам заглянути до автоматизації
Dark Innocence

3
Те ж саме. Є кнопки, які гарантовано шириною 50 балів на всіх мовах. Чому цим слід поповнити мою інакше чисту карту звіту про авторозкладку?
Джон Скало

9
Це, безумовно, величезна проблема, і дивно, що про це більше не йдеться: O
Fattie

2
Я отримую цю помилку, навіть маючи лише англійську локалізацію.
Відтінки

6
Для інших, якщо у вас НЕ є локалізації та просто хочете, щоб ці попередження зникли, тоді перемістіть свою розкладочку із папки Base.iproj, як зазначено тут: stackoverflow.com/a/45040394/1807644
William T.

Відповіді:


179

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

Тут відбувається кілька різних речей. Мені вдалося заглушити попередження з фіксованою шириною у власному додатку, змінивши ширину розмірів об'єктів з фіксованої ширини на більшу або рівну або меншу або рівну .

Це можна зробити, вибравши об’єкт у конструкторі інтерфейсів, перейшовши до інспектора розмірів і змінивши його там:

введіть тут опис зображення


Або виберіть обмеження з контуру документа, перейдіть до інспектора розміру та змініть його там:

введіть тут опис зображення



Що стосується попередження у верхній частині екрана:

Виправлені провідні та кінцеві обмеження з центральним обмеженням можуть спричинити відсікання

Ось знімок екрана з мого власного додатка, в якому я отримував таке саме попередження:

введіть тут опис зображення

У мене була мітка зі знаком @ , яка веде до наступних кнопок, а також вирівнює центр з рейтинговою міткою . Після того, як я усунув обмеження для вирівнювання по центру , попередження зникло, але мені залишився неправильно викладений набір об’єктів.

Саме тоді я пішов у відставку, щоб прийняти перегляд стека . Як неприємно використовувати, коли ви правильно встановите всі обмеження та налаштування, він викладається красиво і без попереджень.


Редагувати

Як пише Repose в коментарях, іноді просто додавання> = 0 буде тим, що вам потрібно, оскільки ви впевнені, що два елементи не перетинаються.


2
> = 0 запобігає перекриттям та виправленим проблемам перекриття, які у мене виникали раніше, перетворення Ведучих / Задніх вправо / Вліво виправляло помилку відсікання для мене. Результати можуть відрізнятися. Будь-ласка, проконсультуйтеся зі своїм лікарем перед початком будь-якої розробки програмного забезпечення.
Відпочити

@Репозитуйте точно. Подумайте, що може піти не так, і додайте обмеження, щоб переконатися, що цього не відбувається.
Відтінки

Миролюбно використовувати Stack View в iOS, можливо, це нормально, але для OS X (вибачте, MacOS) це не завжди вдалий вибір. Apple повинна це знати. Поняття UI та UX часто мають різні припущення.
Joannes

2
Я згоден із прийняттям UIStackView. Це, безумовно, було болем, і я намагався це зробити з кількома обмеженнями, я додав ще один UIStackView, і він виклав ідеально.
templeman15

1
Чи є якийсь інший варіант - Що робити, якщо я хочу, щоб управління було встановлене по ширині?
Кампай

60

Ви можете спробувати вимкнути "Поважне мовне направлення" на обмеженнях, щоб заглушити попередження і побачити, чи це допомагає. Виберіть обмеження та відкрийте інспектор атрибутів / розмірів. Будь ласка, дивіться додане зображення.

Якщо ви не плануєте локалізувати додаток на інших мовах, тоді це рішення не повинно мати жодних резервних даних. Для локалізованих програм ви повинні бути більш обізнаними щодо розмірів вашої етикетки та шрифту.

ps Це рішення працює для iOS. Для macOS спробуйте> = або <=, щоб заглушити попередження.

pps Мітки на малюнку нижче набагато простіше створити за допомогою властивості AutoLayout та attributedString на одному UILabel або UITextView за допомогою NSMutableAttributedString. Зображення призначене лише для демонстрації.

Неповажний мовний напрямок


1
Для мене виправлена ​​проблема "Виправлені провідні та кінцеві обмеження з обмеженням у центрі можуть викликати відсікання". Дякую!
toddg

4
Якщо ви спробували це, і це, мабуть, не мало жодного ефекту, спробуйте вийти з Xcode і перезапустити його. Цей трюк спрацював на мене.
T'Pol

2
Це не дозволить мені скасувати це.
Скутер

1
Ідеально! це працювало для мене і не потрібно змінювати свої обмеження, дякую!
rgkobashi

1
> = обмеження мали поганий вплив на мене через різні складні схеми пріоритетності. Я був готовий вставити мітку в View, але потім знайшов ваше рішення, яке зробило трюк! Дякую :)
KerCodex

33

Для локалізованих міток та кнопок це попередження має сенс, і ви повинні надати необхідні обмеження, щоб ваші мітки не перетиналися. Якщо вони не перетинаються зараз, вони можуть бути в майбутньому, тож не завадить надати обмеження.

Xcode допомагає автоматично додавати ці обмеження:

У контурному документі вашої розкадровки натисніть на жовту стрілку і виберіть "фіксований ведучий" або "фіксований проміжок", залежно від того, де знаходиться текст на екрані (зліва або справа). Це виправить це для більшості питань.

Скріншот Xcode

Якщо у вас є проблема з кнопкою без тексту (лише зображення), спробуйте видалити "заголовок за замовчуванням", який може все-таки встановити для кнопки:

Скріншот Xcode


4
У моєму випадку, вилучивши заголовок за замовчуванням, видалено попередження. Дякую!
Рейнхард Маннер

Прийміть до відома , що при додаванні UIButtonдо Storyboard, то default buttonназва буде button.
Мігель Тепале

29

З Labels, ви можете встановити Linesє 0і Autoshrinkвластивості полягає Minimum Font Sizeв тому, щоб видаляти Fixed Width Constraints May Cause Clippingпопередження, як це:

введіть тут опис зображення


3
Так, вам потрібно лише встановити рядки до 0.
Reefwing

2
Рядки налаштувань до 0 змушують розширювати мітку до стільки потрібних рядків, що може бути не тим, що потрібно.
nickdnk

@nickdnk: Я знаю, що якщо ви встановите обмеження висоти для етикетки, воно не розшириться.
Lionking

20

Ще одне швидке рішення!

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

введіть тут опис зображення


Працював як шарм!
ремесло

7

Я знаю, що на це питання вже відповіли, але те, що я зробив, щоб виправити цю помилку в моєму випадку, було додати властивість "Співвідношення аспектів", а потім усунути обмеження ширини чи висоти, це спрацювало досить добре і було менше зусиль, і мені вдалося зберегти однаковий вихід і адаптувати мій погляд для різних пристроїв.


4

Swift 4, Xcode 9.1:

Щодо цього питання, я думаю, що ваш об’єкт не знає, що це правильне центральне положення в контексті його нагляду , і, використовуючи функцію видалення, більша за чи інші налаштування провідних / трелінгу, більшість разів працює неправильно. По-перше, ви повинні перевірити правильність обмежень вашого нагляду.

Якщо ваш нагляд (и) встановлено правильно, ви можете спробувати "пояснити" своєму об'єкту, яке правильне положення у поданні, встановивши обмеження "горизонтально в контейнері" :

введіть тут опис зображення


2

Якщо вам потрібно фіксоване обмеження ширини для кнопки, просто встановіть пріоритет обмеження ширини 700.


1

У мене була така ж проблема, але коли я переходжу на >=неї, автоматично встановлюю константу 0, якщо я вибираю, 60наприклад, попередження з’являється знову. Тож я опинився в циклі проблеми.

Я міг би виправити вбудовування свого LabelвView

Editor > Embed In > View

У LabelI наборі Top, Bottom, Leadingі Trailingзconstant = 0

обмеження

В Viewя встановив , constraintsщо я очікував , що раніше.


1

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

Підхід, який працював тут, полягав у створенні UIView з відповідними обмеженнями розміру та вбудовуванні UILabel як підпоглядом у UIView. Тоді, якщо необхідно, усічення відбувається, і я не отримую попередження. Це працює, чи UIView / вбудований UILabel знаходиться в StackView чи ні.

Це по суті той же підхід, що і у Haroldo Gondim, але тут ви можете бачити, що він також працює з StackView або без нього.

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

введіть тут опис зображення


0

Як ви бачите на зображенні нижче, у мене була помилка "Фіксовані обмеження ширини можуть викликати відсікання", оскільки хоча я встановив моє текстове поле вертикальним центром, а мітка містила ліве обмеження, я не визначив обмеження. для текстового поля стосовно мітки, тому XCode попередив мене про те, що текстове поле може вирізати (бути викладеним вище) міткою.

введіть тут опис зображення

Після додавання лівого обмеження до текстового поля, щоб завжди залишатись на деякій відстані окрім етикетки, XCode вважала, що помилка була вирішена, і це мене більше не турбувало попередженням про обмеження.


0

У мене виникли подібні проблеми, коли я намагався мати кнопку з однаковими підкладками з країв супервиду.

Випадок помилки

Я в кінцевому підсумку використовував horizontal centerобмеження і equal widthsобмеження для super view.

Моє рішення


-1

Щоб виправити помилку : обмеження з фіксованою шириною можуть спричинити відсікання ”та інші локалізації. Вам потрібно вибрати подання / об’єкт, перейти до« Показати інспектор розміру », знайти обмеження по ширині та встановити постійне на велике або рівне:

Інспектор розмірів

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

Це означає, що у представленні X / X скаргу на представлення / об’єкт відсутнє провідне або кінцеве обмеження для сусіднього виду.

Утримуючи керування, перетягніть його на найближчий огляд / об’єкт

Contrl + PressClick

Додайте провідні або відмінні обмеження

Провідні / трейлінг-обмеження


Якщо ви натиснете трикутник попередження, Xcode автоматично створить їх для вас одним клацанням миші.
лінзовет
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.