Каковы значения приоритета автоматического сопоставления содержимого и ограничений сжатия содержимого?

Я пытаюсь отладить проблему автоматической компоновки, и знание значений по умолчанию для приоритетов Content Hugging и Content Compression Resistance поможет.

Что это? Являются ли они конкретными для конкретных компонентов? Существуют ли константы, которые я могу использовать для их ссылки?

Ключевые слова: UILayoutPriority

Ответ 1

Эти значения соответствуют современным требованиям Xcode 7.3.


Значения приоритетов интерфейса Builder:

При перетаскивании компонента в Interface Builder вы получаете следующие приоритеты. Примечание: (250,750) обозначает 250 по горизонтали и 750 по вертикали.

+-------------------------+---------------+------------------------------+
|         Object          | Hugging (H,V) | Compression Resistance (H,V) |
+-------------------------+---------------+------------------------------+
| UIActivityIndicatorView | 750,750       | 750,750                      |
| UIButton                | 250,250       | 750,750                      |
| UIDatePicker            | 250,250       | 750,750                      |
| UIImageView             | 251,251       | 750,750                      |
| UILabel                 | 251,251       | 750,750                      |
| UIPageControl           | 250,250       | 750,750                      |
| UIPickerView            | 250,250       | 750,750                      |
| UIProgressView          | 250,750       | 750,750                      |
| UIScrollView            | 250,250       | 750,750                      |
| UISearchBar             | 250,250       | 750,750                      |
| UISegmentedControl      | 250,250       | 750,750                      |
| UISlider                | 250,250       | 750,750                      |
| UIStepper               | 750,750       | 750,750                      |
| UISwitch                | 750,750       | 750,750                      |
| UITabBar                | 250,250       | 750,750                      |
| UITextField             | 250,250       | 750,750                      |
| UITextView              | 250,250       | 750,750                      |
| UIToolbar               | 250,250       | 750,750                      |
| UIView                  | 250,250       | 750,750                      |
+-------------------------+---------------+------------------------------+

Выводы:

  • Все объекты имеют 750,750 в качестве приоритета сжатия содержимого.
  • Большинство имеют 250,250 как свой Приоритет обхода контента.
  • UIImageView и UILabel оба имеют 251,251 как их Охват содержимого.
  • UIActivityIndicatorView, UIStepper и UISwitch имеют 750,750 как их Приоритет обхода контента.
  • UIProgressView имеет 250,750 как его Приоритет обхода контента.

Программные значения приоритета по умолчанию:

При создании объекта программно (например, UIButton()) вы получаете следующие приоритеты.

+-------------------------+---------------+------------------------------+
|         Object          | Hugging (H,V) | Compression Resistance (H,V) |
+-------------------------+---------------+------------------------------+
| UIActivityIndicatorView | 750,750       | 750,750                      |
| UIButton                | 250,250       | 750,750                      |
| UIDatePicker            | 750,750       | 750,750                      |
| UIImageView             | 250,250       | 750,750                      |
| UILabel                 | 250,250       | 750,750                      |
| UIPageControl           | 750,750       | 750,750                      |
| UIPickerView            | 750,750       | 750,750                      |
| UIProgressView          | 250,750       | 750,750                      |
| UIScrollView            | 250,250       | 750,750                      |
| UISearchBar             | 250,750       | 750,750                      |
| UISegmentedControl      | 250,750       | 750,750                      |
| UISlider                | 250,750       | 750,750                      |
| UIStepper               | 750,750       | 750,750                      |
| UISwitch                | 750,750       | 750,750                      |
| UITabBar                | 250,750       | 750,750                      |
| UITextField             | 250,250       | 750,750                      |
| UITextView              | 250,250       | 750,750                      |
| UIToolbar               | 250,750       | 750,750                      |
| UIView                  | 250,250       | 750,750                      |
+-------------------------+---------------+------------------------------+

Выводы:

  • Существуют различия в Охват содержимого между экземплярами, созданными IB, и программно создаваемыми объектами для следующих объектов: UIDatePicker, UIImageView, UILabel, UIPageControl, UIPickerView, UISearchBar, UISegmentedControl, UISlider, UITabBar и UIToolbar.

Программные константы

+----------------------------------+-------+
|             Constant             | Value |
+----------------------------------+-------+
| UILayoutPriorityRequired         |  1000 |
| UILayoutPriorityDefaultHigh      |   750 |
| UILayoutPriorityDefaultLow       |   250 |
| UILayoutPriorityFittingSizeLevel |    50 |
+----------------------------------+-------+

Когда вы добавляете ограничение (либо через Interface Builder, либо программно), его приоритет по умолчанию - 1000.