dmi*_*aev 634 cocoa autolayout
关于Cocoa Autolayout关于内容拥抱和抗压缩性之间差异的Apple文档,我找不到明确的答案.
有人可以解释他们的用法和差异吗?
Sno*_*ash 1294
概念的快速摘要:
一个例子:
说你有这样的按钮:
[ Click Me ]
Run Code Online (Sandbox Code Playgroud)
并且你已经将边缘固定到一个优先级为500的更大的超级视图.
然后,如果拥抱优先级> 500,它将如下所示:
[Click Me]
Run Code Online (Sandbox Code Playgroud)
如果拥抱优先级<500,它将如下所示:
[ Click Me ]
Run Code Online (Sandbox Code Playgroud)
如果superview现在缩小,如果压缩阻力优先级> 500,它将如下所示
[Click Me]
Run Code Online (Sandbox Code Playgroud)
否则,如果压缩电阻优先级<500,它可能如下所示:
[Cli..]
Run Code Online (Sandbox Code Playgroud)
如果它不能像这样工作那么你可能还有一些其他的限制正在弄乱你的好工作!
例如,你可以将它固定到优先级为1000的superview.或者你可以拥有宽度优先级.如果是这样,这可能会有所帮助:
编辑器>适合内容的大小
Bal*_*ian 166
来源:@mokagio
内在内容大小 - 相当不言自明,但具有可变内容的视图会知道其内容有多大,并通过此属性描述其内容的大小.具有内在内容大小的视图的一些明显示例是UIImageViews,UILabels,UIButtons.
内容拥抱优先级 - 此优先级越高,视图抵抗的增长就越大于其内在内容大小.
内容压缩阻力优先级 - 此优先级越高,视图抵抗收缩的程度就越小于其固有内容大小.
点击此处查看更多解释:自动布局魔术:内容大小优先级
Bri*_*ell 40
假设您有一个带有"Click Me"文本的按钮.该按钮的宽度应该是多少?
首先,你绝对不希望按钮小于文本.否则,文本将被剪裁.这是水平压缩阻力优先级.
其次,你不希望按钮大于它需要的大.一个看起来像这样的按钮,[Click Me],显然太大了.你希望按钮"拥抱"其内容而不需要太多填充.这是水平内容拥抱优先级.对于按钮,它不如水平压缩阻力优先级强.
rob*_*off 18
如果view.intrinsicContentSize.width != NSViewNoIntrinsicMetric,则自动布局会创建一个特殊的类型约束NSContentSizeLayoutConstraint.此约束的作用类似于两个常规约束:
view.width <= view.intrinsicContentSize.width具有水平拥抱优先级的约束,和view.width >= view.intrinsicContentSize.width具有水平压缩阻力优先级的约束.在Swift中,使用iOS 9的新布局锚点,您可以设置如下的等效约束:
let horizontalHugging = view.widthAnchor.constraint(
lessThanOrEqualToConstant: view.intrinsicContentSize.width)
horizontalHugging.priority = view.contentHuggingPriority(for: .horizontal)
let horizontalCompression = view.widthAnchor.constraint(
greaterThanOrEqualToConstant: view.intrinsicContentSize.width)
horizontalCompression.priority = view.contentCompressionResistancePriority(for: .horizontal)
Run Code Online (Sandbox Code Playgroud)
类似地,如果view.intrinsicContentSize.height != NSViewNoIntrinsicMetric,则自动布局会创建一个NSContentSizeLayoutConstraint对视图高度的两个约束.在代码中,它们看起来像这样:
let verticalHugging = view.heightAnchor.constraint(
lessThanOrEqualToConstant: view.intrinsicContentSize.height)
verticalHugging.priority = view.contentHuggingPriority(for: .vertical)
let verticalCompression = view.heightAnchor.constraint(
greaterThanOrEqualToConstant: view.intrinsicContentSize.height)
verticalCompression.priority = view.contentCompressionResistancePriority(for: .vertical)
Run Code Online (Sandbox Code Playgroud)
您可以在布局运行后NSContentSizeLayoutConstraint通过打印查看这些特殊实例(如果存在)view.constraints.例:
label.constraints.forEach { print($0) }
// Output:
<NSContentSizeLayoutConstraint:0x7fd82982af90 H:[UILabel:0x7fd82980e5e0'Hello'(39)] Hug:250 CompressionResistance:750>
<NSContentSizeLayoutConstraint:0x7fd82982b4f0 V:[UILabel:0x7fd82980e5e0'Hello'(21)] Hug:250 CompressionResistance:750>
Run Code Online (Sandbox Code Playgroud)
的Content hugging priority是像橡皮筋,其周围放置的图.优先级值越高,橡皮筋越强,它想要拥抱的内容越大.优先级值可以想象为橡皮筋的"强度"
而且Content Compression Resistance,视图"抵抗"变小了多少
具有更高电阻优先级值的视图是抵抗压缩的视图.
| 归档时间: |
|
| 查看次数: |
202676 次 |
| 最近记录: |