設定約束後 如何獲取正確的frame

2021-07-27 11:26:00 字數 1159 閱讀 1020

1、任何原因引起view的尺寸被改變

2、呼叫viewcontroller的「viewwilllayoutsubviews」方法

3、未啟用autolayout情況,呼叫「layoutsubviews」

4、啟用autolayout情況,呼叫viewcontroller的"updateviewconstraints"方法。在這個方法裡,會呼叫所有subview的「updateconstraints」方法。

5、當介面被重新整理後,呼叫viewcontroller的「viewdidlayoutsubviews」

第二種:

另外一種:

當我們使用

autolayout

做適配時,可能會有這樣的需求,就是在想在適配完成前就取得子控制項的真實

frame

,來做一些操作。比如我們想把乙個正方形的uiimageview剪成乙個圓形,這時候就需要這麼做

[objc]view plain

copy

self

.imageview

.layer

.cornerradius

= self

.imageview

.frame

.size

.width/ 2

;  self

.imageview

.clipstobounds

= yes

之前我們只要把上面兩句放在

layoutsubviews: 方法中設定即可,因為在layoutsubviews: 方法中,我們可以設定子控制項的frame。但是一旦我們使用的autolayout適配後,在這個方法中就不能獲得子控制項的真實frame,因為在此時,autolayout的適配並沒有完成。那麼這時我們就必須這麼做了:

[objc]view plain

copy

- (void

)layoutsubviews   

實際上,autolayout的適配是在呼叫n次(子控制項個數)控制器的viewdidlayoutsubviews:方法後才完成的,在stackoverflow上也有人建議在此方法中做操作。但是如果像是自定義的cell這麼去做,肯定不方便,再者關鍵是viewdidlayoutsubviews:會呼叫多次,會影響使用者體驗和效能。

Zookeeper如何正確設定和獲取watcher

watcher 設定是開發中最常見的,需要搞清楚watcher的一些基本特徵,對於exists getdata getchild對於節點的不同操作會收到不同的 watcher資訊 state 112 會話超時狀態 state 113 認證失敗狀態 state 1 連線建立中 state 2 暫時不清...

php中如何獲取檔案的正確路徑

以上面的為例子 我們這裡需要使用到 file echo print r files echo server document root 獲取檔案伺服器的根目錄。echo dirname file 獲取當前檔案的目錄 echo file 獲取當前檔案的目錄和檔名。echo basename file ...

如何正確處理中病毒後的電腦

如何正確處理中病毒後的電腦 常在河邊走,哪能不濕鞋呢?網際網路上各種病毒在不停的流竄,作為連線在網路上的電腦,儘管我們已經做了各種防範,但還是不能避免,稍不留神就會中招。而現在我們學到的多是如何防範電腦中毒的知識,但是對於已經中毒的電腦如何處理卻知之甚少。下面我們就向大家介紹中毒後一些緊急處理措施。...