亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Autolayout中Hugging和Compression使用注意

2019-11-14 18:56:01
字體:
來源:轉載
供稿:網友

前言

本文主要側重Autolayout使用過程中,通過代碼和SB添加含有intrinsicSize屬性控件約束的一些細節。

來自我的博客,歡迎訪問:To Be Independent.

 

Hugging和ComPRession 屬性

有很多關于這兩個概念的文章,比如stackoverflow上Cocoa Autolayout: content hugging vs content compression resistance priority。我覺得很形象的說明了設置了有什么用,但是還欠缺什么時候使用,即和`intrinsicSize`的關系。先來看下文檔上的說明:

- contentCompressionResistancePriorityForAxis://Returns the priority with which a view resists being made smaller than its intrinsic size.- contentHuggingPriorityForAxis://Returns the priority with which a view resists being made larger than its intrinsic size.

 

這么一看,就很明了:對于有 intrinsicSize 屬性的控件(如UILabel,UIButton等),如果當前的frame比顯示的content范圍大,那么設置的Hugging屬性起作用,否則設置的Compression屬性起作用。對于相應的數值,越大表明優先級越高,意味著當前的屬性占優。簡單的說,對于需要Hugging的情形,hugging屬性的值越大(優先級越高),那么表明控件需要緊湊的顯示。
Hugging和Compression屬性值有默認值:

  1. 對于純代碼添加的控件,Hugging默認250.0f,Compression默認 750.0f
  2. 通過SB添加,Hugging默認251.0f,Compression默認750.0f

為什么會有不一樣的值?那么先看一下 UILayoutPriority的取值:

static const UILayoutPriority UILayoutPriorityRequired NS_AVAILABLE_IOS(6_0) = 1000; // A required constraint.  Do not exceed this.static const UILayoutPriority UILayoutPriorityDefaultHigh NS_AVAILABLE_IOS(6_0) = 750; // This is the priority level with which a button resists compressing its content.static const UILayoutPriority UILayoutPriorityDefaultLow NS_AVAILABLE_IOS(6_0) = 250; // This is the priority level at which a button hugs its contents horizontally.static const UILayoutPriority UILayoutPriorityFittingSizeLevel NS_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.

 

由此可見,在設計的時候,iOS的開發人員考慮到類似UILabel的控件首要的是顯示所有的內容。

編程實現

通過一段代碼,加載一個button:

UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];button.translatesAutoresizingMaskIntoConstraints = NO;button.backgroundColor = [UIColor redColor];[button setTitle:@"a long long title" forState:UIControlStateNormal];[self.view addSubview:button];NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:button attribute:NSLayoutAttributeLeading relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeading multiplier:1.0f constant:100.0f];[self.view addConstraint:constraint];constraint = [NSLayoutConstraint constraintWithItem:button attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1.0f constant:100.0f];[self.view addConstraint:constraint];constraint = [[NSLayoutConstraint constraintWithItem:button1 attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeWidth multiplier:0 constant:50.0f];[self.view addConstraint:constraint];

 

如上添加的constraint,使得button的frame不足以顯示標題內容,注意上述constraint默認的優先級都是UILayoutPriorityRequired。因此我們可以通過修改最后一個寬度的constraint:

constraint.priority = UILayoutPriorityDefaultHigh - 1;

 

對于用SB添加的控件,也可以用類似的方法修改。至于為什么,SB中添加的如UILable的控件,當給其添加某個約束后,SB中Hugging屬性的值是251呢?這是為了默認可以顯示全內容。此時,你可以在sb中手動把空間尺寸變小,再把控件的某個屬性的constriant(width或tailing)的優先級設置為low。這時,你也可以在SB中發現相應的約束由藍色實線變成了藍色虛線。當然,如果compression約束起作用的情況下,約束也是藍色虛線。

與其它控件一起使用

如上單個控件可以正常使用,如果設置一個相鄰的控件,會有什么需要注意的嗎?答案是NO,什么都不需要操心,仍舊按之前的方法添加約束,這極大的簡化了工作量。
另外,這里需要說明的是,需要更新控件上文字的時候,為了有一個較好的動畫效果,需要:

[label.superView layoutIfNeeded];

 

 
 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人免费淫片aa视频免费| 欧美亚洲国产另类| 欧美日韩国产综合新一区| 国产情人节一区| 久久久久九九九九| 91夜夜揉人人捏人人添红杏| 精品一区二区三区四区在线| 日韩av综合网站| 久久精品中文字幕一区| 欧美成人精品h版在线观看| 久久精品免费电影| 亚洲男人天堂久| 91亚洲精品在线观看| 亚洲字幕在线观看| 国产精品夜色7777狼人| 国产精品久久久久久久久久久新郎| 伊人久久久久久久久久久久久| 日韩av在线影院| 亚洲一区亚洲二区亚洲三区| 欧美超级免费视 在线| 国产精品成久久久久三级| 色偷偷888欧美精品久久久| 久久亚洲一区二区三区四区五区高| 91高清在线免费观看| 人人爽久久涩噜噜噜网站| 国产精品久久久999| 日韩视频免费在线观看| 精品一区二区三区四区| 亚洲欧美日韩国产中文| 96国产粉嫩美女| 日韩精品视频在线播放| 国产精品99久久99久久久二8| 亚洲а∨天堂久久精品喷水| 国产不卡精品视男人的天堂| 日韩网站免费观看| 色偷偷av一区二区三区乱| 国产成人精品亚洲精品| 2019中文在线观看| 日本精品va在线观看| 色悠久久久久综合先锋影音下载| www.久久久久| 国产精品美女999| 青草热久免费精品视频| 国产精品国产三级国产aⅴ9色| 成人黄色免费片| 成人夜晚看av| 国产亚洲欧美日韩美女| 在线一区二区日韩| 国产精品久久久久久久午夜| 韩国v欧美v日本v亚洲| 久久久亚洲欧洲日产国码aⅴ| 亚洲性猛交xxxxwww| 久久综合电影一区| 欧美电影在线观看高清| 热99精品里视频精品| 久久久成人精品| 日韩av网站在线| 亚洲性日韩精品一区二区| 成人字幕网zmw| 亚洲大胆人体av| 久久国产精品影片| 国产精品久久久久999| yw.139尤物在线精品视频| 国产亚洲一区二区在线| 大胆欧美人体视频| 亚洲在线观看视频网站| 欧美电影院免费观看| 久久人人爽亚洲精品天堂| 国产性色av一区二区| 国产亚洲欧美日韩一区二区| 中文字幕欧美日韩在线| 亚洲另类图片色| 色婷婷久久一区二区| www.久久撸.com| 欧美电影免费看| 中文欧美在线视频| 中文字幕精品av| 91久久精品国产91久久性色| 欧美一级黄色网| 韩国福利视频一区| 国产一区二中文字幕在线看| 国产在线高清精品| 欧美一级电影免费在线观看| 中文字幕欧美日韩在线| 久久久中文字幕| 欧美日韩性视频在线| 国产精品一区二区三区在线播放| 成人久久久久爱| 丝袜亚洲欧美日韩综合| 亚洲国产成人久久综合| 国产欧美一区二区三区久久| 国产精品久久久久久亚洲影视| 日本欧美精品在线| 91精品国产91久久久久久| 日韩激情在线视频| 久久久久久久久久久免费精品| 久久久久成人网| 国产日韩在线观看av| 久久久av电影| 九九久久国产精品| 不卡在线观看电视剧完整版| 国产精品久久久久免费a∨| 久久久噜噜噜久久中文字免| 亚洲一区二区自拍| 国产一区二中文字幕在线看| 午夜精品一区二区三区av| 国产精品露脸自拍| 亚洲无限乱码一二三四麻| 亚洲精品美女久久| 欧美自拍大量在线观看| 免费97视频在线精品国自产拍| 成人亲热视频网站| 97在线视频国产| 91九色在线视频| 亚洲综合在线做性| www.亚洲人.com| 久久精品视频99| 成人精品久久一区二区三区| 最近2019年好看中文字幕视频| 亚洲精品一区久久久久久| 亚洲国产精品999| 激情久久av一区av二区av三区| 精品自在线视频| 国产精品美女呻吟| 国产专区欧美专区| 九九热r在线视频精品| 久久九九国产精品怡红院| 久久精品国产综合| 色综合亚洲精品激情狠狠| 日韩a**站在线观看| 欧美日韩亚洲成人| 在线视频一区二区| 97在线免费视频| 亚洲偷熟乱区亚洲香蕉av| 日韩久久精品成人| 欧美极度另类性三渗透| 亚洲欧美国产高清va在线播| 亚洲美女av网站| 亚洲欧美成人精品| 九色精品美女在线| 国产丝袜精品视频| 国产成人精品日本亚洲| 日韩av不卡在线| 欧美老妇交乱视频| 亚洲最大福利网站| 欧美专区国产专区| 亚洲三级av在线| 国产精品男人爽免费视频1| 91精品国产91久久久| 国产精品69久久久久| 欧美日韩成人在线播放| 色99之美女主播在线视频| 日韩成人中文字幕| 17婷婷久久www| 国产欧美日韩中文字幕在线| 在线电影av不卡网址| 国产亚洲精品久久久| 国内久久久精品| 成人在线小视频| 欧美性开放视频| 国产精品视频一区二区三区四| 91大神福利视频在线| 国产成人精品综合| 精品久久久久久亚洲精品|