是不是 iOS 代碼手寫界面布局已經被判了死緩?
iPhone 各種尺寸,是不是 iOS 代碼手寫界面布局已經被判了死緩?
我實在是不明白手寫和屏幕尺寸(適配)的矛盾點在哪裡。
就像王垠說的
系統設計中,很多人喜歡讓代碼靈活,「可配置」。後來發現,配置文件越來越複雜,裡面邏輯越來越多。最後配置文件變成了一種代碼,而配置文件語法,變成一種奇葩的程序語言。出現這個問題的原因,被我叫做【邏輯守恆定律】:邏輯不在代碼里,就在配置文件里。代碼里的邏輯少了,配置里的邏輯必然增加。
你的適配不在代碼里,就在 Storyboard 里。適配的邏輯不會因為出於代碼還是在 Storyboard,他就消失掉。
手寫布局 不等於 frame 布局 Storyboard 不等於 Auto LayoutAuto Layout 不等於 不用做適配開發 iOS 程序,應該採用什麼方式來搭建界面呢?這問題到現在還是爭論不休。主要有兩個爭論:
- 使用 xib/storyboard 這樣的圖形化方式搭建界面,還是使用代碼。
- 界面布局,是使用傳統 frame 布局,還是使用 AutoLayout 設置約束。
上面兩個爭論相互獨立。使用代碼可以選擇 frame 布局或 AutoLayout。使用 xib/storyboard,同樣也可以選擇 frame 布局或 AutoLayout。
但我發現,很多人搞不清楚這個相互獨立的關係。他們認為 AutoLayout 只能在 xib/storyboard 中使用,使用代碼就只能用最原始的 frame 布局。從而有這個邏輯上不成立的疑問。----------類似問題經常出現,我寫了個文章,iOS 開發中,搭建界面的一些爭論 - 黃二少碎碎念 - 知乎專欄。這只是我的看法,適當參考。
如果你說的「手寫布局」指的是不用autolayout, 所有UIView的frame用代碼死算,那麼手寫布局不是死緩,是死刑。
如果你指的是在代碼里創建UIView和autolayout以及用代碼改動autolayout constraints, 那麼可以告訴你所有的項目多少都要在代碼里動一下autolayout的,尤其是做animation的時候,所以沒有死緩這一說。
那麼剩下的就是有多少布局相關的邏輯放在代碼里的問題了。這個不能一概而論,視項目而定。仁者見仁智者見智的事了。有人就是喜歡手寫約束,Storyboard也好Interface Builder也好都是幫你寫了約束罷了。我覺得真正死掉的是手寫計算frame的方式。
我並不這麼認為。
手寫UI布局代碼在多種狀態切換的場景下,邏輯處理起來會比較清晰點。
而且在 Autolayout 的出現之後,適配屏幕也變得更簡單了。可以試試基於Autolayout的 Masonry. GitHub - SnapKit/Masonry: Harness the power of AutoLayout NSLayoutConstraints with a simplified, chainable and expressive syntax. Supports iOS and OSX Auto Layout。
對於堅持Frame布局的項目,仍然有很好的替代方案 Hotpot. GitHub - hellometers/Hotpot: 一個輕量的 iOS 布局輔助框架。
當然,這個問題的爭論應該止於各自團隊的習慣和約定。絕無可能
就算用純xib
也總會有場景你需要拉一條constraint的outlet出來 用代碼進行修改
不明白你非要這麼說 代碼 sb 一起用不是很方便?
masonry
AutoLayout 和算 Frame 兩種概念,跟手寫布局沒有直接關係,我就見過用 Masonry 的比拖線還快的。
手寫也好。Autolayout也好。無非就是一個懶字。會手寫的懶得學Autolayout,會Autolayout的懶得手寫。簡單布局手寫可以,而且可能會更方便。但是自動布局同樣可以做。複雜布局用手寫可能會死人。自動布局依然在控制之中。
特別是重構的時候。自動布局非常有優勢。
新建項目刪除main.storyboard開始寫代碼......
大哥 別鬧, 手寫界面布局是一個ios開發永遠也無法捨棄的技能, 無論xib或者sb用的多6, 一個複雜的動畫, 或者頁面都是需要用代碼的, 而且手寫界面布局, 不是把坐標大小寫死的, 完全可以用代碼做頁面適配, 也有一些牛逼的第三方適配 比如Masonry 或者用蘋果自帶的VFL, 都可以做到各個機型的適配, 我們公司的app 做ipad和iphone適配的時候, 有的地方用的xib 有的用代碼, 有的用sb, 看開發者的心情. 總的來說 無論是xib 還是sb 或者手寫代碼 , 都是一個寫代碼的工具, 沒有什麼被不被拋棄的問題, 就像現在的MVVM 和MVC一樣, 一個設計模式而已, 沒必要那麼鑽牛角尖, 寫出牛逼的代碼, 完美的界面, 才是高手
我們內部有個工具,就是解決這個問題的,直接在Adobe illustrator里設計好,然後一鍵導出,然後拖到xCode里,然後回ai里複製生成的代碼過去就完成了,會跟ai里一模一樣,如果是按鈕還可以直接生成事件。
講道理,我覺得適配很多時候手寫代碼才更可控...xib動不動約束亂作一團,而且別人根本沒法看懂另一個人設的約束.....還有就是不是說手寫代碼就沒有Auto Layout....
另外.用完Xcode8之後想提交新版本提交不了了,換回Xcode7發現所有xib都打不開了,我的內心是崩潰的......
一個一個把所有的xib設置兼容Xcode7才打開了...只想說馬德智障..不管是手寫還是IB,都是一個工具,哪個方便用哪個,為什麼一定要爭哪個好?
這個結論你怎麼得出來的,雙方各有各的優點。不過,沒storyboard照樣寫程序,沒代碼可不行。