这儿每天共享一个 iOS 的新知识,快来关注我吧

前言

有时不得不说,一些苹果 API 十分难了解。比方 setContentHuggingPriority(内容拥抱优先级)和 setContentCompressionResistancePriority(内容抗紧缩优先级)这两个 API。

每次我用到的时分都要查一遍其用法,了解难度比较高,并且欠好回忆,今天企图讲清楚这两个办法的用处,并希望能一次记住,今后直接使用不再费时间查资料了。

两个概念

要想用好这两个办法,首先要知道两个概念,即:内容区域视图区域

内容区域指的是这个视图中的内容所占巨细,比方一个 UILabel,内容区域便是它的文本占用的巨细

视图区域指的是这个视图的巨细,比方一个 UILabel,当你给它束缚的宽度为屏幕的宽时,视图区域便是整个屏幕的巨细。

setContentHuggingPriority

这个特点是坚持内容区域巨细的才能,直译过来叫内容拥抱优先级,当视图区域大于内容区域时,这个办法就会生效。

咱们来用一个比如阐明:在水平方向上,有两个 Label,暂时叫 leftLabel (红色背景)和 rightLabel(蓝色背景)。

leftLabel 具有以下束缚:

  1. 间隔屏幕左面 0

  2. 间隔屏幕上边 50

rightLabel 具有以下束缚:

  1. 左面贴着 leftLabel 的右侧

  2. 间隔屏幕上边 50

  3. 间隔屏幕右边 0

这种情况下,两个 Label 占有整个屏幕,但没有指定各自的宽度,就会导致一种束缚混乱。咱们先设置 leftLabel 的文本为 ApplerightLabel 的文本为 Swift,看下效果:

试图讲清楚自动布局的压缩和抗压缩优先级

能够看到,默许情况下 leftLabel 占有更多的空间,那么假如咱们想让 rightLabel 具有更多的空间,只需求让 leftLabel “抱得更紧”,也便是需求设置 setContentHuggingPriority 更高的优先级。

leftLabel.setContentHuggingPriority(.defaultHigh, for: .horizontal)
rightLabel.setContentHuggingPriority(.defaultLow, for: .horizontal)

由于 leftLabel 的拥抱优先级高,所以当视图区域大于内容区域时,leftLabel 会“抱在一同”:

试图讲清楚自动布局的压缩和抗压缩优先级

setContentCompressionResistancePriority

这个办法是反抗紧缩的才能,或者反抗缩小的才能,跟上一个特点相反,直译过来叫内容抗压优先级

需求注意的是,当内容区域超越视图区域时,它就会起作用。

仍是上边的比如,咱们先把 leftLabelrightLabel 多加一些文本:

leftLabel.text = "AppleAppleAppleAppleApple"
rightLabel.text = "SwiftSwiftSwiftSwiftSwift"

两个文本由于太长无法同时显现完整,默许情况下,leftLabel 会展现完整,rightLabel 显现不下的当地展现…:

试图讲清楚自动布局的压缩和抗压缩优先级

假如咱们想让 rightLabel 展现完整,只需求让 rightLabel抗紧缩才能变强(由于它被紧缩了,想不被紧缩就得提高抗压才能),也便是需求设置 setContentHuggingPriority setContentCompressionResistancePriority 更高的优先级,相反把 leftLabel抗紧缩才能变弱

rightLabel.setContentCompressionResistancePriority(.defaultHigh, for: .horizontal)
leftLabel.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)

再看下效果,已经满意了咱们的需求:

试图讲清楚自动布局的压缩和抗压缩优先级

总结

这两个办法都能够设置笔直水平两个方向上的束缚,咱们本次 demo 都是以水平方向.horizontal为例的。

简略的回忆办法

setContentHuggingPriority,Hugging 是拥抱的意思,优先级越高,抱的越紧,抱紧之后所有的剩下空间都会被紧缩掉,最终视图紧紧抱着内容。

setContentCompressionResistancePriority,这个办法是反抗被紧缩的才能。你能够幻想成用力按压一个绷簧,绷簧的抗紧缩才能越高,就越不简单被紧缩,抗紧缩才能越低,越简单被紧缩。

所以,通过调整这两种优先级,你能够操控笔直方向和水平方向上多个视图,哪些视图应该首选坚持原始巨细(高优先级),哪些能够灵活改动(低优先级)。

这儿每天共享一个 iOS 的新知识,快来关注我吧

本文同步自微信大众号 “iOS新知”,每天准时共享一个新知识,这儿仅仅同步,想要及时学到就来关注我吧!