iOS开发,做UI时,用StoryBoard还是纯代码编写?

首先  就个人的开发经验来看: 

对简单app而言,用storyboard

如果是复杂app,推荐二者混用

如果是大型app,单页面超复杂炫酷app,或sdk,第三方库,推荐纯代码布局。


然后我看到了网上对这两者的介绍,引用过来给大家参考:

StoryBoard是苹果在2011年的WWDC Session 309《Introducing Interface Builder Storyboarding》中介绍的Interface Builder的新功能。其基本想法是将原本的xib进行升级,引入一个容器用于管理多个xib文件,并且这个容器可以通过拖拽设置xib之间的界面跳转。而这个容器就是被苹果称做的StoryBoard。


优点

效率高;
Auto Layout,做适配很方便;
多语言很方便;
静态TableView,CollectionView极其方便;
最重要的是直观,结构清晰,一目了然!

总体上来说,Storyboard有以下好处:
你可以从storyboard中很方便地梳理出所有View Controller的界面间的调用关系。这一点对于新加入项目组的开发同事来说,比较友好。
使用Storyboard可以使用Table View Controller的Static Cell功能。对于开发一些Cell不多,但每个Cell都不一样的列表类设置界面会比较方便。
通过实现 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 方法,每个View Controller的跳转逻辑都聚集在一处,这方便我们统一管理界面跳转和传递数据。
Storyboard可以方便将一些常用功能模块化和复用。例如WWDC2011年介绍Storyboard的视频就将微博分享功能模块化成一个单独的Storyboard。我在开发App时,也将例如通过第三方注册登录模块做成一个单独的Storyboard,便于以后复用。

缺点
我在新项目使用Storyboard时,却发现它只是看上去很美,真正用起来,却有很多问题,我发现的问题有:
首先它和xib一样,对版本管理是灾难。因为是它实际上的多个xib的集合,所以更容易让多人编辑产生冲突。苹果对storyboard的设计也不好,基本上你只要打开,什么都不做,这个文件就会被更改,所以冲突几乎是不可避免的—除非你不打开,实在不小心打开看了,需要在提交前回退成服务器上的版本。
Storyboard提供的 Static cell特性只适合于UITableViewController的子类。我很多时候的用法是一个TableView嵌套在另一个UIView中,static cell就不能用了。
segue的概念对于开发来说并不省事,如果是用程序内部trigger一个segue,那么需要在另一个回调的地方设置dest view controller的参数信息。 

总结
我仔细比较权衡了一下优缺点,最主要的问题是我的版本管理在多人协作开发时将陷入灾难,而这是完全不能接受的。而最主要的好处就是,你可以在一个类似白板的地方“一揽众山小“一样了解所有界面之间的切换关系,但这个有那么重要吗?我自已其实很清楚跳转逻辑,这个只是对新同事了解项目代码时有帮助,那我花一点时间直接给他讲讲画画不就搞定的吗?为了这点好处而让版本管理无法使用,是完全不能接受的。

所以最终我决定放弃使用StoryBoard了,这个“看上去很美”的功能有着不可接受的缺陷。现在看来,它仅适用于做一些Demo的开发。苹果一直没有处理好这类可视化界面设计功能的版本管理,象xib文件,虽然是xml格式的,但如果多人编辑了,合并起来也会很麻烦。所以业界好多同行都不用xib,直接用纯代码来写界面,虽然稍慢一点儿,但是工程很干净,也基本没有了多人协作的版本冲突问题。


那么我们在什么时候使用storyboard, xib, 和纯代码呢?

(1)什么时候使用storyboard? 组织多种view的层级关系,也就是传说中的segue。使用一些列表或表格单元的模板的时候。能使 用storyboard的情况下尽量用storyboard。

什么时候不建议使用storyboard? 

动态或复杂布局,这时候可能需要用代码来计算相关view的位置。如果一个view已经用NIB 或代码实现 

(2)什么时候使用nib? 

模态框(如登录提示什么的)可复用视图组件或模板 

什么时候不推荐使用nib?
有动态内容的视图
,不方便在XIB中进行设计的试图
(3)什么时候使用代码? 

纯代码好处就是灵活,接手项目的时候好改。缺点,很明显慢。 动态布局试图特效
什么时候不推荐使用代码? 

什么时候使用代码都是一个好方法,但不一定是最好的。



你可能感兴趣的:(iOS,纯代码,storyboard)