UIView 中關(guān)于 Content Hugging 和 Content Compression Resistance 的方法有如下:
- (UILayoutPriority)contentHuggingPriorityForAxis:(UILayoutConstraintAxis)axis API_AVAILABLE(ios(6.0));
- (void)setContentHuggingPriority:(UILayoutPriority)priority forAxis:(UILayoutConstraintAxis)axis API_AVAILABLE(ios(6.0));
- (UILayoutPriority)contentCompressionResistancePriorityForAxis:(UILayoutConstraintAxis)axis API_AVAILABLE(ios(6.0));
- (void)setContentCompressionResistancePriority:(UILayoutPriority)priority forAxis:(UILayoutConstraintAxis)axis API_AVAILABLE(ios(6.0));
在 Autolayout 優(yōu)先級(jí)的范圍是 1 ~ 1000,創(chuàng)建一個(gè)約束,默認(rèn)的優(yōu)先級(jí)是最高的 1000。
Content Hugging Priority
Content Hugging Priority: 該優(yōu)先級(jí)表示一個(gè)控件抗被拉伸的優(yōu)先級(jí)。優(yōu)先級(jí)越高,越不容易被拉伸。
使用場景:
當(dāng)一個(gè)視圖上有多個(gè) intrinsic content size 的子控件,子視圖的總和,不夠填充父視圖區(qū)域時(shí),此屬性可以控制優(yōu)先拉伸哪個(gè)視圖內(nèi)容。
Content Compression Resistance Priority
Content Compression Resistance Priority: 該優(yōu)先級(jí)和上面那個(gè)優(yōu)先級(jí)相對(duì)應(yīng),表示一個(gè)控件抗壓縮的優(yōu)先級(jí)。優(yōu)先級(jí)越高,越不容易被壓縮
使用場景:
當(dāng)一個(gè)視圖上有多個(gè) intrinsic content size 的子控件,并且子控件可能會(huì)超出父視圖的區(qū)域時(shí),此屬性可控制哪些視圖被內(nèi)容被優(yōu)先壓縮,使其不超出父視圖區(qū)域。
相關(guān)代碼:
// 抗被拉伸
[self.label setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal];
// 抗被壓縮
[self.label setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal];
優(yōu)先級(jí):
static const UILayoutPriority UILayoutPriorityRequired API_AVAILABLE(ios(6.0)) = 1000; // A required constraint. Do not exceed this.
static const UILayoutPriority UILayoutPriorityDefaultHigh API_AVAILABLE(ios(6.0)) = 750; // This is the priority level with which a button resists compressing its content.
static const UILayoutPriority UILayoutPriorityDragThatCanResizeScene API_AVAILABLE(macCatalyst(13.0)) = 510; // This is the appropriate priority level for a drag that may end up resizing the window's scene.
static const UILayoutPriority UILayoutPrioritySceneSizeStayPut API_AVAILABLE(macCatalyst(13.0)) = 500; // This is the priority level at which the window's scene prefers to stay the same size. It's generally not appropriate to make a constraint at exactly this priority. You want to be higher or lower.
static const UILayoutPriority UILayoutPriorityDragThatCannotResizeScene API_AVAILABLE(macCatalyst(13.0)) = 490; // This is the priority level at which a split view divider, say, is dragged. It won't resize the window's scene.
static const UILayoutPriority UILayoutPriorityDefaultLow API_AVAILABLE(ios(6.0)) = 250; // This is the priority level at which a button hugs its contents horizontally.
static const UILayoutPriority UILayoutPriorityFittingSizeLevel API_AVAILABLE(ios(6.0)) = 50; // When you send -[UIView systemLayoutSizeFittingSize:], the size fitting most closely to the target size (the argument) is computed. UILayoutPriorityFittingSizeLevel is the priority level with which the view wants to conform to the target size in that computation. It's quite low. It is generally not appropriate to make a constraint at exactly this priority. You want to be higher or lower.
水平or垂直
typedef NS_ENUM(NSInteger, UILayoutConstraintAxis) {
UILayoutConstraintAxisHorizontal = 0,
UILayoutConstraintAxisVertical = 1
};
感謝該篇文章的分享:淺談 iOS AutoLayout 中 Label 的抗拉伸和抗壓縮