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

为什么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

VB如何检测是否已连接到Internet? VB如何利用Winsock控件编写自己的Internet程序 VB如何每天抓取 Internet 上某一个网页中的图片来更换桌面的壁纸 VB如何启动拨号网路中的连线? VB如何使用MSCOMM32.OCX发送大于80H的字符,可否给个示例程序? VB如何用VB打开默认浏览器或默认发信程序? VB如何用Visual Basic编写小型的网络系统 VB如何在程序中启动 NT 的【拨号连接】对话框? VB如何在网页上使用 VB5 制作的 ActiveX 控件? VB如何中断【拨号网络连接】? 设计Browser及FTP程序 -VB资料 设计Chat程序 -VB资料 设计E-mail程序 -VB资料 使用VB获得一页的HTML代码 使用VB收发电子邮件 VB使用超链接和发送Email VB使用浏览器的文件复制对话框 输入/输出篇 -VB资料 通过WnetEnumResource函数获得网络资源 -VB资料 通往 Internet 的捷径-VB资料 显示计算机的名称 -VB资料 VB用 MAPI 控件实现发送邮件 VB用 WinSock 控件下载文件 VB用 Winsock 实现聊天的程序 VB用Internet Transfer编写FTP程序 VB用Sockets发送电子邮件 用VB 创建自己的通信程序 用VB5.0开发通信软件的技巧 用VB5开发IE 用VB编写网络寻呼 用VB编写小型的网络系统 我是学php的. 谁可以讲解一下telnet的工作原理????? 狂人语录 那有BOCHS的中文帮助 在server2003操作系统下使用sql server2000 的问题 各位大侠 请问如何在C/s 下Windows程序中 找一个控件 100分 朋友! 关于英文版VC6的问题 请大师指点ASP中unicode to ansi 的问题 richtext中RtfText的内容如何编辑?200分,解决问题另外奉送! 即将前往恒生面试,大家帮我看看需要准备什么. 那有BOCHS的中文帮助 phoenix7789请回答!!!^_^ 我在装Report Machine控件时,Delphi提示我找不到RXGIF.duc,谁在给我一个? 肤色检测的问题,急!!! 如何对asp.net的程序进行加密 用datagrid问题,总是提示列键信息不足或不正确,更新影响多行, 大家来讨论一下C# 和Java ,回贴均有分!! 请问一个sql语句写法问题,100分!!!在线等待 谁能给我一点写网站制作方面投标书或者详细方案 wsad5 怎么连上ORACLE数据库啊 并非复古——关于微内核模式ASP开发框架的讨论,欢迎高手进入! 那有BOCHS的中文帮助 我愿送500分求解JAVA问题!!!!!! 关于frame里面的参数传递问题,火急 find函数的问题,请各位老兄帮忙 请问这个链接怎么写? 用xsl将xml转成html提示.... 为什么看不到邻近计算机? 关于浏览器的自定义工具栏! 无法打开web项目bbs 请告知可以下载Domino数据库安装文件和Lotus Notes的网址!在线等 我的ie6无法加载applet,请教解决方法! 如何用ASP写关闭当前窗体的代码? 用xsl将xml转成html提示.... sqlserver数据库怎么和应用程序一起打包? 一个困惑的问题,高手和有耐心的人请进! 实现要求是:对一个用来保存文件的richtext域如何创建一个代理,以实现每天固定一个时间从服务器/本地的一个固定目录下获取一个更新的文 关于数据库导入导出的问题 请问:提交表单后,把参数传到一个新弹出的页面,要求此页面没有“标准按钮”“工具栏”“地址栏”而且固定窗口大小,且不能最大化,如何 求助于高手:Tab Control控件如何使用? 组件通过鼠标移动 求助 sniffer 紧急!帮忙啊!如何获得使用<div class="test" id="mydiv"> ...</div>定义的对象 哪儿找ORACLE8i 9i for x86solaris? 在IIS中,url转发如何隐藏真实地址? 原来对应Access数据库的水晶报表现在如何转换成对应sql server 的?Access数据库已经转换成Sql server的 找到了工作,不过得告别DELPHI一段时间了本来想在非技术区发这个,但是我在这里得到的帮助最多所以...... 在web页面中如何使用脚本判断当前是否有键被按下? 哈希表 访问CLOB字段问题 世界如此美妙,我却如此暴躁,这样不好,不好.是谁说的 什么是半殖民半封建社会? ”世界如此美好我却如此暴躁,这样不好,不好“出自哪里? 为什么世界如此美妙,而我却如此暴躁? 回应"世界如此美妙,我却如此暴躁,这样不好不好"这句话应该怎么说啊 作图x^2+y^2-4x=0 这个是圆吗 时间中的四个冒号我在查询包裹时,它的发送时间是“18:21:35”这里面怎么有四个冒号啊,表示的到底是什么时间呢? y=|-x.x+4x+5| 英语翻译还有几个词语,“ 大师,大道,大智慧,臻品,1对1” 半殖民与半封建是什么意思 世界如此美妙,我却如此暴躁,这样不好,不好的英文翻译 被控杀死杰克逊者出狱 称为谋生计想当圣马力诺执政官会见王毅王毅同圣马力诺外长瓦伦蒂尼会谈美国对监听国家分“三六九等”纽约手机可接收紧急警报韩国向美国求证韩总统是否遭窃听 但美猫鼬欲擒毒蛇当美食遭反击败阵(组图)中国赴刚果(金)维和工兵分队顺利通过羊晚集团派工作组对新快报存在问题进行美国在罗马尼亚的反导基地开建纽约手机可接收紧急警报首届GREAT英国网络电影节开幕 5曝厄齐尔韧带撕裂将伤停3个月 或缺席市四大班子会议昨日召开云南网友向省长反映乡村教师每月500雪舞要嫁给别人了黄宗泽:男人不可以穷我就是喜欢胖子!十一黄金周 坚守岗位的劳动者们清真美食节150个国际展位“名花有主乌鲁木齐火车南站发送旅客34.7万居民身份证业务今起恢复办理
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘