ios 自動布局新增刪除約束

2021-10-03 10:26:35 字數 4187 閱讀 3743

目錄

|-約束方法

|-刪除約束

|-布局示例

|–|-第一種 constraintwithitem

|–|-第二種 vfl

|–|-第三種 masonry

|-問題記錄

nslayoutconstraint *constraint =

[nslayoutconstraint constraintwithitem:playbtn // 要新增約束的view

attribute:nslayoutattributewidth // 要新增的約束屬性

relatedby:nslayoutrelationequal // 約束關係

toitem:nil // 參照的view

attribute:nslayoutattributenotanattribute // 參照檢視的屬性

multiplier:

1.0// 倍數

constant:

126.0];

// 數值

[playbtn addconstraint:constraint]

;// 新增約束

// 刪除約束

for(nslayoutconstraint *constraint in playbtn.constraints)

}

重要:使用autolayout的方式來布局必須要設定該屬性,否則布局無效。

[label settranslatesautoresizingmaskintoconstraints:no]

;

在contentview上新增乙個view

1、第一種方式

uiview *topview =

[[uiview alloc] init];[

self

.contentview addsubview:topview]

;// view 左側和父檢視對齊

[self

.contentview addconstraint:

[nslayoutconstraint constraintwithitem:topview

attribute:nslayoutattributeleft

relatedby:nslayoutrelationequal

toitem:

self

.contentview

attribute:nslayoutattributeleft

multiplier:

1 constant:0]

];// view 頂部和父檢視對齊

[self

.contentview addconstraint:

[nslayoutconstraint constraintwithitem:topview attribute:nslayoutattributetop relatedby:nslayoutrelationequal toitem:

self

.contentview attribute:nslayoutattributetop multiplier:

1 constant:0]

];// view 右側和父檢視對齊

[self

.contentview addconstraint:

[nslayoutconstraint constraintwithitem:topview attribute:nslayoutattributeright relatedby:nslayoutrelationequal toitem:

self

.contentview attribute:nslayoutattributeright multiplier:

1 constant:0]

];// view 高度設為20

// 沒有參照檢視,toitem 設為nil,toitem 後面的 attribute 設為 nslayoutattributenotanattribute

[self

.contentview addconstraint:

[nslayoutconstraint constraintwithitem:topview attribute:nslayoutattributeheight relatedby:nslayoutrelationequal toitem:nil attribute:nslayoutattributenotanattribute multiplier:

1 constant:20]

];topview.backgroundcolor =

[uicolor redcolor]

;// autolayout 布局會和 autoresizing 衝突而不起作用,所以這裡把 autoresizing 設為no

[topview settranslatesautoresizingmaskintoconstraints:no]

;

constraintwithitem:函式這篇文章介紹的很詳細了,留個傳送門。

2、第二種方式

// 去除布局安全邊距,讓檢視邊緣貼近螢幕邊緣

self

.contentview.preservessuperviewlayoutmargins = no;

// 不顯示安全邊距,依然會有 uiedgeinsetsmake(8, 8, 8, 8) 的邊距,設為0;

self

.contentview.layoutmargins =

uiedgeinsetsmake(0

,0,0

,0);

uiview *topview =

[[uiview alloc] init];[

self

.contentview addsubview:topview]

;// topview 左側右側對齊父檢視

[self

.contentview addconstraints:

[nslayoutconstraint constraintswithvisualformat:

@"h:|-[topview]-|" options:

0 metrics:nil views:@]

];// topview 頂部對齊父檢視,高度為20

[self

.contentview addconstraints:

[nslayoutconstraint constraintswithvisualformat:

@"v:|-[topview(20)]" options:

0 metrics:nil views:@]

];// autolayout 布局會和 autoresizing 衝突而不起作用,所以這裡把 autoresizing 設為no

[topview settranslatesautoresizingmaskintoconstraints:no]

;

3、第三種方式(masonry)

uiview *topview =

[[uiview alloc] init];[

self

.contentview addsubview:topview]

;[topview mas_makeconstraints:

^(masconstraintmaker *make)];

topview.backgroundcolor =

[uicolor redcolor]

;

當然還可以使用storyboard。

前兩種是系統提供的方法,masonry也是封裝了系統的方法,讓ui布局更簡單。了解系統的布局方式可以方便理解masonry的工作原理。

這個介紹了新增多個約束nslayoutconstraint-**實現自動布局

ios 布局篇(一)-nslayoutconstraint的使用和 vfl 語言介紹

1、使用第二種方式vfl布局時不指定到父檢視的位置,則會預設啟用安全區域,檢視到螢幕邊緣會有一端距離。

h:|-

[view]

-|

如果想檢視緊貼螢幕邊緣布局,加上限制條件即可

h:|-

0-[view]-0

-|

ios 自動布局約束的問題

目前的自動布局的框架有兩個框架是很好用的乙個就是snapkit 還有個就是masonry,為什麼要使用框架,因為蘋果自帶的框架我們使用起來 寫的太多了。所以我們可以使用第三方框架來編寫。其中這裡補充一點就是我們如果已經給乙個控制項新增過約束,我們還想去修改的話,我們只需要通過下面這個 進行判斷,滿足...

iOS 開發學習40 自動布局約束

第一步要確保story board的use autolayout是選中的。約束布局大致有三種方式 leading space to superview 左邊距 trailing space to superview 右邊距 top space to superview 上邊距 bottom spac...

iOS自動化布局 AutoLayout約束優先順序

autolayout新增的約束中也有優先順序 priority 優先順序的數值1 1000,分為兩種情況 當uilabel顯示的內容過長或太短,控制項就會被拉伸和壓縮,當我們不想讓控制項被拉伸壓縮時,就需要設定控制項的固有約束 intinsic content size 來實現我們的需求。固有約束分...