Що таке «Обмеження до запасу» у Розділ розмов у Xcode 6


249

Я працюю з авторозміткою та обмеженнями, і виявив, що Constrain to marginsв Xcode 6 є параметр, який не був у Xcode 5 і перевіряється за замовчуванням.

Я створив тестовий проект, потім додав UITableViewна ViewController кадр, встановлений на той самий розмір, що і перегляд, і додав обмеження

Xcode 6 Ви можете бачити тут, навіть якщо табличний перегляд має той самий кадр, що і перегляд. Xcode пропонує додати -16 як обмеження, тоді як Xcode 5 запропонує додати інтервал 0.

З обмеженням маржі перевірено

Тепер, коли ви знімаєте прапорець "Обмежувати маржу", він поводиться так само, як Xcode 5, і запропонує додати 0 як обмеження

З обмеженням маржі UnChecked

Крім того, я виявив, що як тільки я додаю обмеження з Constrain до поля, що перевіряється, я більше не можу відкривати файл раскадровки в Xcode 5, тому в Xcode 6 це безумовно щось нове

Сподіваюся, я можу правильно пояснити своє питання. Мені хотілося б зрозуміти, що насправді робить «Обмеження маржі» і коли я повинен і не повинен цим користуватися. Я вибачаюся, якщо це щось дуже просте і очевидне.

EDIT

Я знайшов дещо - що про полях макета в обговоренні тут , цікаво , якщо це пов'язано з цим.


15
Не потрібно вибачатися - зовсім не очевидно, що це робить.
Бен Клейтон

4
+1 не потрібно просити вибачення, я також хотів задати це питання. BTW: щоб відкрити рекламну дошку в Xcode5, подивіться на: stackoverflow.com/a/25298909/529243
Олаф,

1
Це найближче до знайденого мені пояснення: stackoverflow.com/questions/25275901/…
Натанієль

Як відключити це?
orkenstein

2
Так, це справжній біль. Я так і не зміг розібратися, як зняти її постійно.
Бхуміт Мехта

Відповіді:


315

Я взагалі не розумію, чому люди скаржаться на те, що " Поля спричинить відверту аварію на чому-небудь до iOS 8. "

Налаштування ваших обмежень по відношенню до краю в файлі XIb або розкадровки НЕ зробити ваше додаток аварії на iOS7, і він НЕ робить різницю UI на пристрої iOS7 ні, до тих пір , поки ви не торкнутися UIView.layoutMarginsі UIView.preservesSuperviewLayoutMarginsвластивості в вашому коді.

Що таке Поля в iOS8

Компонування поле являє відступи навколо внутрішньої частини UIViewщо система компонування можна використовувати при прокладці підвидів - щоб гарантувати , що залишається зазор між краєм зору і підвидом. У цьому відношенні це дуже схоже на властивість padding, пов'язану з блоками в CSS.

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

За замовчуванням у UIViewполя розміщення 8 балів на кожній стороні, і це не може бути змінено в Interface Builder . Однак, встановивши UIView.layoutMarginsвластивість у коді, який доступний лише в iOS8, ви можете скорегувати ці значення.

Ви можете отримати ІБ для відображення поля за допомогою Редактора> Полотно> Показати прямокутники макета: введіть тут опис зображення

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

Як користуватися маржами

Єдиний спосіб використовувати поля в Interface Builder - це перевірити параметр Відношення до поля при налаштуванні обмежень. Ось як ви спрямовуєте обмеження на використання поля замість ребер, коли викладаєте мій погляд.

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

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

  1. Перший елемент (зніміть прапорець), другий елемент (позначка): У цьому випадку ми заявляємо, що лівий край підгляду повинен вирівнюватися до лівого поля супервізу (як показано на цьому зображенні).

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

  1. Перший елемент (зніміть прапорці), другий елемент (зніміть прапорці): обидва використовують край, а не поле . У цьому випадку ми заявляємо, що лівий край підгляду повинен вирівнюватися до лівого краю нагляду.

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

  1. Перший елемент (перевірка), другий елемент (зніміть прапорець): У цьому випадку ми заявляємо, що лівий край підгляду має вирівнюватися до лівого краю нагляду. Цей вид компонування насправді змушує підзагляд перекривати нагляд.

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

  1. Перший предмет (чек), другий предмет (чек). Це насправді має такий же ефект, як і у випадку 2, оскільки і субпідгляд, і нагляд мають однакову маржу за замовчуванням. Ми заявляємо, що лівий запас підрозділу повинен відповідати лівому краю супервізу.

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

Що добре в маржі

Ця нова функція (iOS8) впливає лише на розвиток інтерфейсу, якщо ви вирішили використовувати поля.

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

self.rootView.layoutMargins = UIEdgeInsetsMake(0, 50, 0, 0);

Щоб проілюструвати цю перевагу, у наступному випадку всі ліві краї підперегляду вирівнюються до лівого краю їхнього перегляду. Таким чином, зміна лівого поля нагляду буде впливати на всі підгляди одночасно.

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


Дякую за детальне пояснення. Я відзначаю це як прийняту відповідь, оскільки це добре пояснює речі.
Bhumit Mehta

Дякую @Bhumit, сподіваюся, що ця відповідь допоможе.
Скотт Чжу

4
"Я зовсім не розумію, чому люди скаржаться". Ну, можливо, поведінка змінилася з однією з останніх бета-версій, я не перевіряв. Але принаймні кілька місяців тому це спричинило збій, навіть якщо ви не намагалися встановити layoutMargins у коді.
КПМ

Варто зазначити, що, додаючи нові обмеження, новіші версії Xcode дозволяють зняти прапорець "Обмежувати на полях", який встановлює той самий прапор "Відносно до поля". Це корисно, оскільки це економить кілька кліків! Чудова відповідь BTW, так добре пояснено, і зображення були дуже корисними.
EricWasTaken

Я зазначив, що картинки розміщені на Dropbox. Не було б краще розмістити зображення на SO?
тестування

63

В iOS 8 тепер у вас є можливість визначити свої обмеження відносно заздалегідь визначеного поля до меж супервізу замість самих меж нагляду. Так, це повністю пов'язане з полями макета, на які ви вказали в документах. Однією з переваг є те, що ви можете переосмислити свої поля динамічно або по-різному для кожного типу пристроїв, і макет буде оновлено відповідно без зміни обмежень.

Коли його використовувати: коли ви хочете скористатися цією новою гнучкістю.

Коли НЕ використовувати його: для будь-якого додатка, націленого на роботу на iOS 7 або нижче.


21
Це було б чудовою особливістю, якщо вона не була включена за замовчуванням і все-таки спричинить
явний

1
Не можу погодитися більше.
КПМ

42

Властивість на UIView є: layoutMargins. Див. Документи Apple . В основному, якщо поля макета 8,8,8,8 (за замовчуванням), обмеження з 0 провідним простором до поля контейнера матиме x-позицію 8. Зверніть увагу, що це доступно лише в iOS8 або новіших версіях.

Для всіх, хто не хоче, щоб їхні обмеження переходили до поля контейнера:

CTRL + натискання + перетягування, щоб показати спливаюче вікно створення обмежень.

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

Тепер він покаже можливість створити обмеження НЕ на межі. Це ШЛИШЕ в моєму використанні.


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

Чому на Землі за замовчуванням не 10pt?
ZaBlanc

11
Apple має історію вибору довжини та розмірів на основі досліджень зручності використання, а не шляхом вибору номерів, які ми читаємо код. Наприклад, висота за замовчуванням для багатьох речей становить 44 або 35 пт. @ZaBlanc
Кайл Робсон

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