對storyBoard的誤解以及手碼約束

2022-09-13 00:12:21 字數 3919 閱讀 7065

1.現在有的公司在開發中可能還存在對storyboard的誤解

說storyboard是xml的,效能不好,且不適合團隊開發。

稍微一動就會改變storyboard的狀態,在公司團隊開發中造成了很大的困擾,因此很多公司拒絕使用storyboard。

其實,以上的bug是xcode4.x以前的,xcode5.0以後,這些bug就已被修復了;

如果真的不小心改變了storyboard中控制項的位置,可以使用git恢復。

還有一點,在專案中只要一編譯就會把storyboard轉化為二進位制檔案,在執行的過程中並不會很慢,所以效能上來說不會差很多

測試:我們可以顯示boundle內容,找到storyboard,此時已經不能用xcode開啟了,可以顯示包內容,在終端輸入以下命令

終端命令:cd main.storyboardc   

lsxxd 要檢視的檔案.nib             可以發現其已經是乙個二進位制資料,打成了乙個包 

2.那我們在開發中怎麼選擇呢?

使用 xib 和 storyboard 的優點:

1.可以迅速的完成介面的搭建工作,比手碼更加快捷,可以很快的看見效果,利於除錯

2.對新人來說這跟容易理清各個模組間的跳轉關係

純手碼的優點:

1.便於統一管理,可以很快的修改統一樣式

2.「**是王道」,可以做到storyboard做不到的事情

例如:把乙個按鈕加進乙個uilabel中,storyboard就做不到,只能是同級關係;

但是純手碼就可以,因為uilabel繼承自uiview,繼承自uiview的控制項都可以容納子控制項

在開發中我們可以根據公司的實際需求和個人愛好來選擇。但是身為乙個ios開發者,不論是手碼還是storyboard都應該熟練的使用。

3.約束

1.vfl的使用

"|"表示superview. 

|-間距-[view1物件名]-(>=20)-[view2物件名]

不寫h/v就表示橫向,間距可以寫固定值也可寫》/<。

形象化的理解,"|"是用來確定view上、下、左、右關係的。

想要確定從上到下的關係,就加v:|。那麼這個vfl字串就可以描述從上到下的view們的關係

//

1 建立控制項

uiview *blueview =[[uiview alloc] init];

[self.view addsubview:blueview];

blueview.backgroundcolor =[uicolor bluecolor];

uiview *redview =[[uiview alloc] init];

[self.view addsubview:redview];

redview.backgroundcolor =[uicolor redcolor];

//2 禁用autoresizing

redview.translatesautoresizingmaskintoconstraints =no;

blueview.translatesautoresizingmaskintoconstraints =no;

//3 建立約束

//blueview的約束

nsarray *blueviewhcon = [nslayoutconstraint constraintswithvisualformat:@"

h:|-pd1-[bview]-pd2-|

" options:0 metrics:@ views:@];

nsarray *blueviewvcon = [nslayoutconstraint constraintswithvisualformat:@"

v:|-20-[bview(50)]-20-[rview(==bview)]

" options:nslayoutformatalignalltrailing metrics:nil views:@];

nslayoutconstraint *redviewwidth = [nslayoutconstraint constraintwithitem:redview attribute:nslayoutattributewidth relatedby:nslayoutrelationequal toitem:blueview attribute:nslayoutattributewidth multiplier:0.5 constant:0

];

//4 新增約束

[self.view addconstraints:blueviewhcon];

[self.view addconstraints:blueviewvcon];

[self.view addconstraint:redviewwidth];

2.手碼約束

//

新增關閉按鈕

uibutton *closebtn =[uibutton buttonwithtype:uibuttontypecustom];

[closebtn setbackgroundimage:[uiimage imagenamed:

@"alphaclose

"] forstate:uicontrolstatenormal];

[img addsubview:closebtn];

//新增約束注意點

/*1.關閉autoreszing

2.新增到父控制項中

3.建立約束

4.新增約束

*/closebtn.translatesautoresizingmaskintoconstraints =no;

//top

nslayoutconstraint *topc = [nslayoutconstraint constraintwithitem:closebtn attribute:nslayoutattributetop relatedby:nslayoutrelationequal toitem:closebtn.superview attribute:nslayoutattributetop multiplier:1.0 constant:0

];

//right

nslayoutconstraint *rightc = [nslayoutconstraint constraintwithitem:closebtn attribute:nslayoutattributeright relatedby:nslayoutrelationequal toitem:closebtn.superview attribute:nslayoutattributeright multiplier:1.0 constant:0

];

//width

nslayoutconstraint *withc = [nslayoutconstraint constraintwithitem:closebtn attribute:nslayoutattributewidth relatedby:nslayoutrelationequal toitem:nil attribute:nslayoutattributenotanattribute multiplier:1.0 constant:20

];

//height

nslayoutconstraint *heightc = [nslayoutconstraint constraintwithitem:closebtn attribute:nslayoutattributeheight relatedby:nslayoutrelationequal toitem:nil attribute:nslayoutattributenotanattribute multiplier:1.0 constant:20

];

//新增約束

[img addconstraints:@[topc,rightc]];

[closebtn addconstraints:@[withc,heightc]];

對SDN的誤解

誤解一 sdn一定要使用openflow協議來配置 面 openflow只是發展最早 目前影響力最大的南向介面,但是並不是唯一的。誤解二 sdn要求硬體 面的標準化 這只是openflow的要求,並不是sdn的要求。誤解三 sdn裝置可以代替所有裝置 誤解四 sdn得到了所有廠商的支援 誤解五 sd...

對敏捷開發的誤解

對敏捷開發的誤解 誤解一 敏捷對人的要求很高 很多人在嘗試實施敏捷時說 敏捷對人的要求太高了,我們沒有這樣的條件,我們沒有這樣的人,因此我們沒法敏捷。可是,敏捷對人的要求真的那麼高麼?軟體歸根到底還是一種創造性活動,開發人員的技術水平和個人能力對軟體的質量還是起著決定性的作用,各種過程與方法只是幫助...

對DllMain的誤解 轉

向原文致敬 一直以來對dllmain的了解也就侷限於,實驗性的在dllmain裡面寫上 cout dll執行 我在dllmain裡面這樣寫的 cpp view plain copy bool apientry dllmain hmodule hmodule,dword ul reason for c...