標籤:

是不是 iOS 代碼手寫界面布局已經被判了死緩?

iPhone 各種尺寸,是不是 iOS 代碼手寫界面布局已經被判了死緩?


我實在是不明白手寫和屏幕尺寸(適配)的矛盾點在哪裡。

就像王垠說的

系統設計中,很多人喜歡讓代碼靈活,「可配置」。後來發現,配置文件越來越複雜,裡面邏輯越來越多。最後配置文件變成了一種代碼,而配置文件語法,變成一種奇葩的程序語言。出現這個問題的原因,被我叫做【邏輯守恆定律】:邏輯不在代碼里,就在配置文件里。代碼里的邏輯少了,配置里的邏輯必然增加。

你的適配不在代碼里,就在 Storyboard 里。適配的邏輯不會因為出於代碼還是在 Storyboard,他就消失掉。

手寫布局 不等於 frame 布局

Storyboard 不等於 Auto Layout

Auto 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照樣寫程序,沒代碼可不行。


分頁阅读: 1 2