前言:
本篇介紹一下布局中剩下一的一些常用屬性或方法,
1、獲取px的寬高坐標
基本定義
//!獲取當前UI的X值(px) -(CGFloat)stX; //!獲取當前UI的相對螢屏X值(px) -(CGFloat)stScreenX; //!獲取當前UI的Y值(px) -(CGFloat)stY; //!獲取當前UI的相對螢屏Y值(px) -(CGFloat)stScreenY; //!獲取當前UI的width值(px) -(CGFloat)stWidth; //!獲取當前UI的height值(px) -(CGFloat)stHeight;
框架都是相對px寫代碼的,因此,在需要計算一些寬高坐標的時候,需要獲取到px值,
因此,有了幾個屬性(為了區分避免和第三方屬性沖突,加了st前綴),
2、元素移動:初始坐標、移動、還原位置
基本定義
//!將當前的UI移動到指定的坐標(及視情況改變寬高) -(UIView*)moveTo:(CGRect)frame;
//!當前UI第一次設定的frame,方便以后歸位,
- (CGRect)OriginFrame;
//!還原第一次設定的坐標系及寬高
-(UIView*)backToOrigin;
這幾個方法框架在重繪布局的時候,會經常用到,
用到CGRect的時候,使用框架內部的宏定義,可以繼續用px的方法使用,
#define STRectMake(x,y,width,height) CGRectMake(x*Xpt,y*Ypt,width*Xpt,height*Ypt)
3、重繪布局
基本定義:
//!重繪當前UI及子UI的布局以及寬高 -(UIView*)refleshLayout; //!重繪當前UI及子UI的布局以及[寬高(可控制)] withWidthHeight : 是否改變寬與高,默認是YES -(UIView*)refleshLayout:(BOOL)withWidthHeight; //!重繪[當前UI(可控制)]及子UI的布局 withWidthHeight:是否改變寬與高,默認是YES ignoreSelf:忽略自身,默認是NO -(UIView*)refleshLayout:(BOOL)withWidthHeight ignoreSelf:(BOOL)ignoreSelf;
示例:
整體自上而下的重新執行一遍布局,框架內部的使用示例在處理UITextField的時候用到了,因為手機鍵盤彈出,影響了整體布局,需要重繪重新布局,
在布局上,使用更多的是自適應大小,
4、自適應大小
基本定義:
//!遍歷檢測其子UI,如果子UI部分超過,則擴展寬與高,但不會縮小, -(UIView*)stSizeToFit; //!遍歷檢測其子UI,如果子UI部分超過,則擴展寬與高,但不會縮小,px引數:擴展后再追加的長度或高度,默認0 -(UIView*)stSizeToFit:(NSInteger)widthPx y:(NSInteger)heightPx;
框架默認有個sizeToFit屬性,為了區分,加了st前綴,
框架的stSizeToFit,在一些不固定寬高的場景會用的比較多,
示例代碼1:

這里的用法比較高級,可以把UI界面抽離單獨一個檔案當成子控制元件加載,
表頭,加載完兩個子控制元件后,呼叫 stSizeToFit 自適應寬高,
示例代碼2:
//年齡 [[[view addUIView:@"ageView"] width:70 height:32] onBottom:STPreView y:30]; [[[[STLastView backgroundColor:@"#4ed2c0"] clipsToBounds:YES] layerCornerRadius:5.0f] block:nil on:^(UIView* age) { [[[age addImageView:@"sexIcon" img:@"home_icon_boy"] relate:Left v:6] toCenter:Y]; [[[age addLabel:@"AgeText" text:user.AgeText font:22 color:@"#ffffff"] onRight:STPreView x:6] toCenter:Y]; [age stSizeToFit:10 y:0]; }];
對于Label ,用stSizeTiFit 讓左右空出共10個像素,
5、聊天訊息背景圖片拉伸
基本定義:
//!圖片拉伸(一般適用于背景拉伸或聊天圖片的拉伸) -(UIView*)stretch; //!圖片拉伸(一般適用于背景拉伸或聊天圖片的拉伸) x:是px值 -(UIView*)stretch:(CGFloat)x; //!圖片拉伸(一般適用于背景拉伸或聊天圖片的拉伸) x、y: 都是px值 -(UIView*)stretch:(CGFloat)x y:(CGFloat)y;
示例用法:
//換行 [[[[rowView addImageView:nil img:@"answer_type"] x:0 y:0 width:10 height:80] stretch] block:nil on:^(UIImageView* cellView) { if(rowView.subviews.count>1) { UIView *view=STPreView; [cellView onRight:view x:64]; } [[[cellView addLabel:nil text:model.ConfigKey font:36 color:ColorWhite] toCenter:Y] relate:Left v:30]; [cellView stSizeToFit:30 y:0]; [cellView onClick:^(id view) { //彈窗 [self show:model.ConfigValue]; }]; }];
讓圖片拉伸到和表單一樣大小,
示例用法2、聊天訊息圖示拉伸
//評論區 if(topic.comment && topic.comment.count>0) { [[[[view addImageView:nil img:@"circle_comment"] onBottom:STPreView y:15] relate:LeftRight v:124 v2:30] block:nil on:^(UIImageView* commentView) { [[[commentView addLine:nil color:ColorClear] relate:Top v:15] width:1 height:2];//一條隱藏線,為下面回圈做基準定位 for (NSInteger i=0; i<topic.comment.count; i++) { TopicComment*comment=topic.comment[i]; if(!comment.NickName || !comment.CommentContent){continue;} NSString*text=[[comment.NickName append:@" : "] append:comment.CommentContent]; [[commentView addLabel:nil text:text font:24 color:@"#555555" row:0] block:nil on:^(UILabel* label) { [label onClick:^(id view) { [self showCommentView:topic reply:comment.NickName indexPath:indexPath]; }]; [[[[label longPressCopy:YES] relate:LeftRight v:10 v2:16] onBottom:STPreView y:10] sizeToFit]; [[[label addLabel:nil text:comment.NickName font:24 color:@"#576b95"] x:0 y:0] onClick:^(id view) { [self showUser:comment.UserID];//點擊評論的昵稱 }]; }]; } [[commentView stSizeToFit:0 y:18] stretch:45]; }]; } [view stSizeToFit:0 y:20];
圖示是這樣的:

X Y 引數 解釋 :
X:劃一條豎線往左右兩邊拉分離做拉伸,(所以X可以定義在突出的三角后邊的任意位置都行),
Y:劃一條橫線住上下兩邊拉分離做拉伸,(對于上圖不指定,默認是取中間點拉伸),
總結:
布局的大部分屬性就講解到這里了,剩余的一兩個屬性,不足為患,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/1244.html
標籤:iOS
上一篇:Sagit.Framework For IOS 自動布局教程:11、常用宏定義:frame坐標系、獲取UI、UI取值、字體顏色、圖片
下一篇:Sagit.Framework For IOS 自動布局教程:12、UIButton、UILabel、UITextField、UITextView 特殊用法介紹
