Not just<what's new in StoryBoard>

文中示例的項目地址:github

主要記錄一些與StoryBoard相關的東西.目錄如下:

?- StackView

?- StoryBoard Reference?

?- Scene Dock

?- custom segue?

?- unwind segue?

?- something special


1.stackView

自動對其內部的視圖作約束,當內部某視圖hidden == true時,自動將其隱藏,其它視圖約束依次修改。

使用場合:

? ?A:顯示一組相似視圖:比如一橫排按鈕等;

? ?B:顯示一組布局大致相同視圖;

? ?C:運行時動態(tài)插入或刪除視圖,并保證優(yōu)美的約束.

? (使用場合的demo在文章開頭的地址中)

StackView屬性

說明:

? ?1.插入一個UIView,系統(tǒng)會自動對其布局,也可以手動設置約束;

? ?2.若視圖已存在,可以通過hidden屬性使其更新視圖布局.

? ?3.如果出現(xiàn)約束警告,且無法通過update constraints刪除,可以嘗試在警告視圖中放入一個子視圖再移除,或者更新下stackview的Distribution

? ?4.如果動態(tài)更新stackView的視圖,控制臺會打印大量的過渡約束警告:將軸向固定約束的優(yōu)先級改為750即可

一個簡單練習:stackView_camera

2.StoryBoard Reference

在storyBoard中添加對另外一個storyBoard中的引用,從而兩者實現(xiàn)交互。

解決問題:團隊合作造成的IB沖突;龐大的IB管理困難;多個IB文件無法拖線,等.

使用場合:

? ? 1.拆分StoryBoard

? ? ? ? ? ? ?Editor -> Refactor to StoryBoard

? ?2:多個StoryBoard互相拖線

? ? ? ? ? ? StoryBoard拖放一個StoryBoard Reference控件;

? ? ? ? ? ? 設置其StoryBoard名稱(對應StoryBoard文件名mmm)和Reference ID(對象具體的控制器的ID:newID),則此控件代表了mmm.StoryBoard文件下的newID控制器

詳情見項目地址....

3.Scene Dock


scene Dock

使用場合:

? ? ? 1.tableHeaderView

? ? ? 2.tableView cell 選中狀態(tài)

? ? ? 3.特定情況下才顯示的view

使用方式:

? ? ?1.拖任意一個屬于UIView子類的視圖到控制器的Dock欄;?

? ? ?2.布局該視圖....(可以使用Auto Layout);

? ? ?3.將該視圖拖到控制器中 Outlet

? ? ?4.在需要顯示的地方addSubView 或者 =(注意設置frame或AutoLayout)

注意:

? ? ?同一個scene dock只能同時出現(xiàn)一份;

4.custom segue


自定義segue

類似于自定義專場動畫。

1.自定義一個類,繼承自UIStoryboardSegue;

2.重寫其perform方法,設置其目標控制器的轉場代理為自身 UIViewControllerTransitioningDelegate;

3.實現(xiàn)轉場協(xié)議的代理方法:返回自定義的專場動畫類實例;

4.實現(xiàn)一個轉場動畫類(第三步需要返回的類的實例),遵守動畫轉場協(xié)議

UIViewControllerAnimatedTransitioning

? ? ? ? ? .動畫持續(xù)時間

? ? ? ? ?.動畫的出現(xiàn)形式

? ? ? ? ? ? ? ? ? 獲取fromVC fromView toVC toView;

? ? ? ? ? ? ? ? ?根據(jù)實際情況自己手動寫UIView動畫;

? ? ? ? ? ? ? ? ?需要transitionContext.containerView()?.addSubview

? ? ? ? ? ? ? ? ?結束后必須調用transitionContext.completeTransition(true)

說明:

1.SJCustomSegue: UIStoryboardSegue

? ? ? ? ?自定義的segue,用于轉場

2.UIViewControllerTransitioningDelegate

? ? ? ? ?轉場目標控制器的動畫器由該代理設置

3.UIViewControllerAnimatedTransitioning

? ? ? ?動畫控制器的協(xié)議,必須實現(xiàn)其兩個方法,才能算一個動畫

5.unwind segue

使用場景:

? ? ? ? 實現(xiàn)棧頂控制器回退到任意控制器.

unwind segue


使用方式:

? ? ? ? ? ?1.在需要被跳轉的控制器中實現(xiàn) anyName(para:UIStoryBoardSegue) ->Void{}方法

? ? ? ? ? ? ? ? ? 需要添加@IBAction前綴;空方法即可,不需要任何代碼實現(xiàn)

? ? ? ? ? 2.拖拽跳轉觸發(fā)按鈕到其自身控制器dock欄的exit鍵;

? ? ? ? ? 3.在彈出的菜單中,選中希望跳轉的控制器中實現(xiàn)的第一步的方法,即可


關于知識點,暫時介紹到這里,下面分享一些StoryBoard中的小技巧,隨時補充中。。。

6.something special

總結的一些小技巧。 ?

? 1.在storyBoard中創(chuàng)建tableView的tableHeaderView

? ? ? ? ?A.拖拽任意一個視圖到tableView最上方即可。

? ? ? ? ? ? ? ? ? ? 缺點:其子視圖不能在自定義類中拖線,但可以直接拖到控制器

? ? ? ? ?B.scene dock,好用不說了

? ? 2.在storyBoard中創(chuàng)建tableView的HeaderView

? ? ? ? ? ?A.純代碼,xib不說了

? ? ? ? ? ?B.scene dock 不說了

? ? ? ? ? c.tableViewCell.contentView 棒極了

? ? 3.如何讓section懸停,或者不懸停

? ? ? ? ? ?設置tableview的style:plain or group

? ? 4.某個較深的界面需要多次調試

? ? ? ?設置項目的Main Interface為當前控制器,必要時構造一些假數(shù)據(jù)

? ? 5.過渡約束(控制臺打印一堆信息)

? ? ? ? 設置約束的優(yōu)先級,簡直一抓一個準。

? ? 6.在屬性面板增加屬性(比如圓角,borderColor,borderWidth等)

? ? ? @IBInspectable ? 屬性前加上改關鍵詞,不解釋

待續(xù)。。。。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容