说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

为什么iOS开发不需要Storyboard?

HTML文档下载 WORD文档下载 PDF文档下载
对于大多数开发者而言,Storyboard为快速开发所带来直接价值是不可抹灭的。但对一些资深开发者及代码洁癖者来说,却会使其代码及配置相对臃肿或引来不必要的麻烦,那么,iOS开发究竟需不需要Storyboard?

当我在Xcode中创建一个新的iOS项目,无论它是iPhone/iPad设备独占还是universal的,我做的第一件事总是删除Storyboard。并且,和你们想象的不同,我并不是想用XIB来代替Storyboard,我完全不使用Interface Builder。


Treehouse论坛对此有很棒的讨论,并且我听到的说法总是类似:Interface Builder会鼓励做出坏的实践。因为我之前有在Window平台使用Visual Studio开发的经验,我可以很自信的说,Interface Builder非常不好,至少与VS比较是这样。Visual Studio之所以更优秀,其原因之一在于标记式语言(XAML),它能被设计师使用,就像HTML相对于Web一样。

不管怎么说,让我们回到iOS上来。

使用Interface Builder最坏的地方是,它让分解视图块以及从视图控制器(view controller)使用视图的工作大大增加了。它的后果是导致出现体积臃肿的视图控制器,而这是应该避免的,并且它们编辑起来简直是一个噩梦。

即使你做了这些多出来的工作,并且提取出部分UI到可重用的视图里,你在Interface Builder里看到的将是一个个白色块,里面包裹着可重用视图,但你不能直观的看到它们。

另一个问题是outlets,在合并的时候它们可能偶然的断开连接,或者如果你在重用视图时忘记连接它们,你的应用会崩溃。

有些人可能会争论说,当面临屏幕适配问题时,使用Auto Layout和IB结合是一种好的解决办法。这一点我仍然不同意——首先我认为在IB中管理布局约束是噩梦,使用拖拽很难将视图调整到精确的位置,元素会突然对齐到邻近的视图,并且当你添加多个box时,它们的层级顺序会打乱并且改变其它box。

与此对应的是,在Github上有不少Auto Layout的扩展,如Masonry、Snappy、PureLayout、Cartography等,能够帮你省却不少功夫。在将你的子视图实例化到视图控制器之后,你仅需要重写updateConstraints并设置约束条件,即可完成不同尺寸屏幕的适配。比如下面的示例使用了PureLayout库:

updateConstraints.swift

override func updateConstraints() {    super.updateConstraints()       self.buildStatusIndicatorView.autoPinEdgesToSuperviewEdgesWithInsets(UIEdgeInsetsZero, excludingEdge: ALEdge.Trailing)    self.buildStatusIndicatorView.autoSetDimension(ALDimension.Width, toSize: 10)        self.buildNumberLabel.autoPinEdgesToSuperviewEdgesWithInsets(UIEdgeInsets(top: 5, left: 15, bottom: 5, right: 5), excludingEdge: ALEdge.Bottom)    self.buildNumberLabel.autoSetDimension(ALDimension.Height, toSize: 23)       self.branchLabel.autoPinEdge(ALEdge.Top, toEdge: ALEdge.Top, ofView: self.contentView, withOffset: 10)    self.branchLabel.autoPinEdge(ALEdge.Trailing, toEdge: ALEdge.Trailing, ofView: self.contentView, withOffset: -10)        self.commitMessageLabel.autoPinEdge(ALEdge.Top, toEdge: ALEdge.Bottom, ofView: self.buildNumberLabel, withOffset: 10)    self.commitMessageLabel.autoPinEdgeToSuperviewEdge(ALEdge.Leading, withInset: 15)    self.commitMessageLabel.autoPinEdgeToSuperviewEdge(ALEdge.Bottom, withInset: 5)    self.commitMessageLabel.autoConstrainAttribute(ALAttribute.Width, toAttribute: ALAttribute.Width, ofView: self.contentView, withOffset: -20)}

对于表格视图需要计算每个单元格的高度,以达到根据Auto Layout约束条件自动调整大小,代码可以很直观的完成这一点。特别是当iOS 8引入了UITableViewAutomaticDimension选项之后。

英文文章来源:Martin Normark's Blog,译文出自:idlelife,译者:pockry

开放•创新•共赢 2014华为开发者联盟沙龙即将开幕 排名前十的SQL和NoSQL数据库 干货议题,中国互联网安全大会免费门票等你来! 【云先锋】红象云腾:Hadoop将和高铁一样改变我们的生活 IDF 2014上开发者最应关注的三件事之:原生应用兼容性篇 怎样在ActiveReport的设计态的ARDesigner中加入自己做的阿ActiveX控件。 怎么理解该构造涵数???????小小问题散分100. 高分求助!!!急!!!关于两机同上网! keil c51 help! SOS!!!!!一个至今仍未解决的打印问题. 简单问题 Log Explorer for SQL Server VB中的这个语句转成C#怎么写呢? Nokia7210 的模拟器为何比WTK中缺省的模拟器执行速度慢? 一本书每本原价24元.现价比原价便宜了4元,现价比 急求一篇人际关系的论文~3000字左右的~要标准格 求一篇3000字左右的小论文的格式, 求一篇 3000字左右的作文、话题是“物以稀为贵” 求一篇3000字,中国近代史论文.1840——19 圆柱与圆锥的底面积相等若圆柱的高是圆锥的高圆锥高的 急需一篇邓小平理论心得体会 1500字 非常感谢 求一篇3000字以上的社会实践或劳动心得体会的作文 急求一篇关于“感受中国传统文化”的体会的作文 15 中国接受联合国人权审查 美应先审视自巴沙尔下台又能怎么样?美国“监控门”又酿新风波 德法意等国沙特再拒入“非常” 指责安理会未能实韩国要求日本删除主张独岛主权视频首届中国上海国际童书展落幕黑龙江:把群众冷暖放心上北京世纪坛医院:我国首个肿瘤疫苗重点丹东港码头运输忙琼桂粤全力防御强台风“海燕”开荒记仙尘混在明星志愿的日子百变球神兽王界飞鱼岭旅游百尺峡旅游千尺幢旅游汕头老城旅游青澳湾旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘