Day18spring
回顧:架構
1. 座標系:框架
frame bounds center transformide
2. 觸點(UITouch)佈局
touchesBegan:withEventui
touchesMoved:withEventes5
touchesEnded:withEventspa
3. 佈局(Layout)rest
影響屏幕大小該變的因素code
a.橫豎屏的切換
b.設備的不一樣
c.狀態欄(通話 錄音 熱點)
d.各類bar(NavigationBar toolBar TabBar)
e.鍵盤的中英文切換
因此在須要屏幕大小發生該變的時候,從新佈局各個子視圖,對應的方法就是重寫控制器的ViewDidLayoutSUbView 方法,可是該方法只是對控制器攜帶的視圖內部的各個子視圖的一個佈局控制,沒法對子視圖內部的控件實現控制。
4. 關掉AutoLayout之後,drawRect方法中針對視圖繪製的圖形在平屏幕旋轉時或被拉伸,解決辦法,須要設置視圖的「contentMode」設置「redraw」便可。
今天:
1. UIView對內部子視圖的佈局(典型應用:TableViewCell對內部視圖的佈局)
1.1 如何實現:
step1:自定義視圖 繼承自UIView
step2:重寫自定義視圖的方法
a.viewWillLayoutSubViews
b.layoutSubViews
c.viewDidLayoutSubView
方法的執行順序:a. b. c.
通常重寫layoutSubView方法便可
2.佈局對狀態欄和各類Bar的處理
經常使用屬性:
topLayoutGuide.length//屏幕上放當前被佔據的區域的長度
bottomLayoutGuide.length //屏幕下方當前被佔據的長度
3. Autoresizing佈局
3.1 是什麼?
是舊版本(IOS5以前)的自動佈局技術,操做簡單 ,API簡單 弄能也簡單,有侷限性,因此好久以前叫作struts/spring(架構、彈簧)技術
3.2 核心理念
當屏幕大小發生變化時,根據變化的比例,對子視圖進行同比例的變化
3.3 經過設置檢查器的屬性實現
step1:關閉AutoLayout
step2:選中須要佈局的子視圖
step3:打開檢查器5
step4:點亮須要的紅線
外框(4個)紅線負責視圖到父視圖的邊緣
內框(2個)紅線負責視圖的內部是否能夠實現拉伸
3.3 用代碼實現Autoresizing
Autorestory和代碼佈局能夠同時使用,用代碼實現Autoresizing的不足
button.autoresizingMask=UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizin gFlexibleBottomMargin
代碼設置時,規則描述與檢查器中描述相反,只須要設置可變的邊距
4 Autolayout自動佈局
4.1 是什麼?
是從IOS6以後的一個新的佈局技術,功能強大操做複雜,從Xcodes5開始,慢慢好用了,在Xcode6中功能更強大了。
核心理念:使用約束(constraint)來描述控件在視圖中的位置,當屏幕大小發生變化時,系統會根據約束條件自動計算出frame的值,而後將該值賦給控件,實現控件的排布。
4.2 使用故事板實現對代碼的佈局
4.3 操做的重點:
a.選中控件,分析6點,上下左右以及控件的寬高須要那些約束條件才能肯定
b.約束的添加能夠經過屏幕下方的選項,或者是,選中控件之後,按住control,連線到屏幕邊緣或其餘試圖
c.能夠添加的約束條件有:對其方法(與中心點對其或與其餘控件對其)、與邊緣或其餘視圖的間距(前間距和尾間距)、視圖的寬高是給定值仍是以其餘視圖作參照標準。
d.添加約束後,正確的結果出現時,屏幕中有藍線,存在紅色虛線框架時,表明視圖佔據的區域,有橘色線條時,表明當前擺放的位置與定義的位置有距離,能夠經過底部的第三個選項菜單選擇更新某個視圖的frame或者更新全部的frame
e.選中一個視圖,查看第五個檢查器能夠看到該視圖已經加了的約束,能夠選中約束脩改約束的內容
f.選中一個視圖,經過查看場景的文檔結構構圖,觀察該場景下的約束是否有錯誤或者警告,若是有,能夠點擊該場景的右上角的紅色點,進入說明界面,紅色的提示爲異常,必須修改成正確,橘色的系統提示,通常是實際位置與約束位移有誤差,只要更新frame,就可讓橘色的警號消失