Xib AutoLayout等使用心得

2021-07-02 18:32:34 字數 2300 閱讀 5730

在新專案中使用xib有一段時間了,遇到了不少的問題,也收穫了很多的奇蹟,最讓我驚嘆的就是使用熟練之後的介面開發速度,完勝android那種xml方式的半吊子視覺化介面開發工具。這裡把使用心得彙總一下,希望能幫到大家。

storyboard不是我的菜,畢竟vc之間的邏輯關係和跳轉都比較複雜,甚至有時還得實現自己的棧管理,我更喜歡只是純頁面開發的時候使用視覺化工具,就像android的xml一樣。感謝蘋果,xcode的視覺化工具比android那個半吊子強太多了。

xib中頁面元素與vc中的事件關聯我通常自己來通過addtarget的方式手動做,一方面是因為android中這麼做習慣了,另一方面事件註冊的可變性太大,vc下面有時候還會分成更小單元粒度的controller,就像android中的fragment一樣。

1、怎麼樣唯一確定乙個view的布局?

只要直接或者間接確定x,y,width,height這四個值就可以了。這就是xib的中心思想。

確定x和y的方式有很多種,這裡舉幾個常見的例子:指定view在parent中橫向居中就是確定x的值,豎向居中則是確定y的值。指定相對於上方或下方view的距離就是確定view的y值,相對於左方或右方view的距離,就是確定view的x值。同時指定view距離其左方和右方view的距離,就可以同時確定x和width,而同時指定view距離其上方和下方的view的距離,就可以同時確定y和height。

2、支援定製

對於xib中的乙個view,可以指定其custome類,這樣就把具體實現交給繼承了uiview的那個類了。這樣,就可以對系統提供的任何view進行擴充套件,再通過xib布局在頁面上。

3、**與xib混排

xib中可以包含定製的view,而**生成的view中也可以新增通過xib而load進記憶體的view。

4、xib中view的確切布局時機

補充於2015.10.12

在乙個使用autolayout布局的alview中,使用**增加了一些計算好frame的subview,等效果出來後,subview的frame可能會被alview改變,因此,有必要把alview的autoresizessubviews設定為no。

對於通過loadnamedxib載入到記憶體中的view,必須手動指定其frame中的width和height,然後再通過addsubview的方式新增到現有的view樹中,使用xib表示的view在布局時,是以600*600的預設寬高進行的。

5、根view寬高不確定

我們在使用xib要時刻牢記。對於做過android的同學來說,可以簡單地把xib的根view理解成乙個relativelayout。xib的根view的寬高是在真正程式執行到布局時才會參考當前的size class確定下來。所以,除非特別必要,不要使用絕對值來確定x,y,width,height的值。

6、size class

根據當前裝置橫屏、豎屏,還是手機、pad,xib把它們歸為不同的size class,我們可以通過切換size class,讓view在不同size class下展現不同的特性。比如,手機橫屏和豎屏下,使用者頭像的位置分別位於螢幕上方和螢幕左方。

可以看看這篇文章「如何使用view debugging」,通過這個除錯工具可以看到view的層級關係、邊界等很詳細的資訊。

這方面有乙個很經典的場景,就是在經典的登入介面中,頁面中主要的view從上往下依次是使用者名稱輸入框、密碼輸入框、校驗碼輸入框、登入按鈕。預設情況是沒有校驗碼輸入框的,這個時候登入按鈕要緊挨密碼輸入框,一旦使用者的登入觸發安全策略,導致校驗碼輸入框彈出來之後,登入按鈕就要下移,給校驗碼輸入框騰出位置來。

這在android中可以使用vertical的linearlayout很輕鬆地布局出來,但在ios中是沒有現成的view可以做到動態調整子view位置的。只能使用稍微笨一點兒的方式,在**中找到對應的constraints,修改其constant值。

這個時候需要注意,如果明確指定乙個view的width和height等constraints,那這個constraints是屬於這個view的。決定view的x、y,或間接決定width、height的其它constraints都是在view的superview中的。不要找錯了地方。

有的時候,我們可能需要根據view中的內容來動態呼叫乙個view的寬高,如文章的title,字數越多,label越寬。這種情況就需要使用content hugging和content compression resistance這兩個屬性了。其詳細的解釋可以看看官方文件。

這個是最高原則。我在新專案中除了少數幾個很特殊的控制項自己實現之外,99%的布局都使用xib來完成,一開始不太熟悉稍微有些慢,等熟悉了之後,開發速度非常快。如今螢幕尺寸這麼多,這autolayout比手工通過**獲取螢幕寬高計算view布局的方式快了豈止乙個數量級。多練習,會出現奇蹟的。

普華永道 監管風險未知等原因使區塊鏈應用前景不明朗

今日塊訊 9 月 5 日程式設計客棧訊息據 報道,9 月 4 日普華永道發布了一年一度的金融科技調查報告,報告分析稱,監管風險未知 業務效果難以預估相關技術成熟度欠缺 應用場景較少等原因,使得區塊鏈應用的前景並不明朗。此外,在普華永道的調查中發現,大行與bawww.cppcns.comxfteqyo...

iOS10適配 完美解決相機 相簿等許可權的使用

解決相機相簿呼叫奔潰 ios 10 中許可權適配 公升級到ios10之後,需要設定許可權的有 nsphotolibraryusagedescriptionkey nscamerausagedescriptionkey nsmicrophoneusagedescriptionkey nslocatio...

css border製作三角形 圓角框等的使用

透明 ie6瀏覽器不支援transparent透明屬性,就border生成三角技術而言,直接設定對應的透明邊框的border style屬性為 dotted或是dashed即可解決這一問題,原因是在ie6下,點線與虛線均以邊框寬度為基準,點線長度必須是其寬度的3倍以上 height border w...