Я не могу найти четкого ответа на документацию Apple, касающуюся Autolayout Cocoa о разнице между объятием контента и сопротивлением сжатию.
Может кто-нибудь объяснить их обычаи и разницу?
cocoa
autolayout
dmitrynikolaev
источник
источник
content-hugging
бы боролись с пробелами. Это просто заставит вид обойти вас. Но если у вас не слишком много места и вместо этого очень мало места,content-compressions-resistance
вы будете бороться с тем, что ваш взгляд не может показать весь его контент, например, ярлыки будут обрезаны.Ответы:
Краткое резюме понятий:
Пример:
Скажем, у вас есть такая кнопка:
и вы прикрепили края к большему суперпредставлению с приоритетом 500.
Тогда, если приоритет Hugging> 500, это будет выглядеть так:
Если приоритет Hugging <500, это будет выглядеть так:
Если суперпредставление теперь сжимается, если приоритет сопротивления сжатию> 500, это будет выглядеть так
Иначе, если приоритет сопротивления сжатию <500, он может выглядеть так:
Если это не работает так, то, возможно, у вас есть другие ограничения, которые портят вашу хорошую работу!
Например, вы можете прикрепить его к суперпредставлению с приоритетом 1000. Или вы можете иметь приоритет ширины. Если это так, это может быть полезно:
Редактор> Размер по размеру содержимого
источник
Взгляните на этот видеоурок об Autolayout , они объясняют это внимательно
источник
Источник: @mokagio
Внутренний размер контента. Довольно понятен, но представления с переменным контентом знают, насколько велик их контент, и описывают размер своего контента через это свойство. Некоторыми очевидными примерами представлений с внутренними размерами контента являются UIImageViews, UILabels, UIButtons.
Приоритет размещения контента. Чем выше этот приоритет, тем больше сопротивление представлению становится больше, чем его собственный размер контента.
Приоритет устойчивости к сжатию содержимого. Чем выше этот приоритет, тем больше представление уменьшается при уменьшении собственного размера содержимого.
Проверьте здесь для более подробного объяснения: МАГИЯ АВТОМАТИЧЕСКОГО РАЗМЕЩЕНИЯ: ПРИОРИТЕТЫ РАЗМЕРА КОНТЕНТА
источник
Допустим, у вас есть кнопка с текстом «Нажмите меня». Какой ширины должна быть эта кнопка?
Во-первых, вы определенно не хотите, чтобы кнопка была меньше текста. В противном случае текст будет обрезан. Это приоритет устойчивости к горизонтальному сжатию.
Во-вторых, вы не хотите, чтобы кнопка была больше, чем она должна быть. Кнопка, которая выглядела следующим образом, [Click Me], очевидно, слишком велика. Вы хотите, чтобы кнопка «обнимала» ее содержимое без слишком большого заполнения. Это горизонтальный приоритет содержания контента. Для кнопки это не так сильно, как приоритет сопротивления горизонтальному сжатию.
источник
Если
view.intrinsicContentSize.width != NSViewNoIntrinsicMetric
, тогда автоматическое расположение создает специальное ограничение типаNSContentSizeLayoutConstraint
. Это ограничение действует как два нормальных ограничения:view.width <= view.intrinsicContentSize.width
с приоритетом горизонтального объятия, иview.width >= view.intrinsicContentSize.width
приоритета сопротивления горизонтальному сжатию.В Swift с новыми привязками макетов в iOS 9 вы можете установить эквивалентные ограничения, например:
Точно так же, если
view.intrinsicContentSize.height != NSViewNoIntrinsicMetric
, тогда автоматическое расположение создает,NSContentSizeLayoutConstraint
который действует как два ограничения на высоту представления. В коде они будут выглядеть так:Вы можете увидеть эти особые
NSContentSizeLayoutConstraint
экземпляры (если они существуют), напечатавview.constraints
после запуска макета. Пример:источник
Приоритеты устойчивости размещения содержимого и сжатия содержимого работают для элементов, которые могут вычислять свой размер по своей природе в зависимости от входящего содержимого.
Из документов Apple :
источник
Это
Content hugging priority
как резиновая полоса, которая размещается вокруг вида. Чем выше значение приоритета, тем сильнее резиновая полоса и тем больше она хочет обнять свой размер содержимого. Значение приоритета можно представить как «прочность» резиновой лентыИ
Content Compression Resistance
это то, насколько представление «сопротивляется» уменьшению . Представление с более высоким значением приоритета сопротивления будет сопротивляться сжатию.источник