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

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

iOS UIView动画实践(五):Keyframe Animation 【CTO讲堂】简说创业公司的技术选型,从BearyChat的开发说起 《近匠》Webix,跨浏览器的JavaScript UI组件库 微软正式推送Windows 10,你会升级最后一款Windows产品? Cinatra:高性能现代C++ Web框架 《移动App测试实战》作者邱鹏:我在测试过程中遇到的那些坑 Rust一周精彩回顾:《高级Rust编程语言》、新增13名贡献者 来自Sony Morpheus的开发灵感: 如何打造逼真的VR游戏? 如何像巫师那样隔空操作——聊聊迷你雷达的原理和应用 等你来战——IBM Cloudant数据库开发大赛火热开启! 《近匠》360加固保,应用安全攻防的核心实现 DEFCON黑客大会抢鲜看:你所不知道的黑客大对决 MDCC2015中国移动开发者大会启动 七场专题技术论坛公布 【CTO讲堂】如何构建高性能网络服务平台及生态系统? mysql备份数据库批处理 《近匠》Remix周哲,让Android运行在“电脑”上! TIOBE 2015年8月编程语言排行榜:Java第一,Objective-C跌出前五 Oculus PC SDK 0.7版即将发布,含新Direct Driver Mode 【CTO讲堂】NoSQL对未来大数据发展的意义何在? 从Java转向Go——AeroFS的一段奇妙之旅 谷歌重组建母公司Alphabet,新来的CEO Sandar Pichai是什么来头? 《近匠》专访AllSeen联盟主席薛国栋:从通讯层为物联网去中心化 Android性能优化典范(三) 杭州兆合陈洋:微气象大民生,气象微信平台研发探索 【探秘ES6】系列专栏(十):更深入了解生成器 【探秘ES6】系列专栏(十一):类语法 《近匠》专访Depth VR:浅析VR交互技术选型中的瓶颈与机遇 【CTO讲堂】将“简单快速”渗透到移动开发测试每个环节,从fir.im团队说起 全球开发者报告:Windows Phone已死,Windows 10长存 苹果官方博客:从SDK详说Swift代码的改变 Espresso实战:快速的Android UI自动化测试 如何实现有些项输出到打印机,有些项输出到显示器,也就是有预览时能看到,而打印时不把他打印出来. ★紧急求助!!如何在CListCtrl中的非第一列贴图?或者设个标记?在线等待!★ memset、memcopy\memget等都是干什么的怎么用?? dropDownList的异常现象?????? 如何改变EventLog中Source和自定义Log的对应关系? 紧急求助,在线等待。 为什么无法实现? 请问vc60.idb和vc60.pdb是干什么用的? dreamweaver Mx再繁體系統中的使用 乱码问题!请高手赐教!! 请问在jsp中如何连接access数据库? 你愿意赐教吗? w3svc记录的时间跟系统时间不一致? 谁能告诉我在哪儿可以下载到微软BHO的例子? 一个弄了很长时间的问题,高手过来看看。。 怎样在网页中显示数据类型为"OLE 对象"的图片 可以帮我看一下这段程序吗? 谢谢! 急救我 请问 tomcat 中服务 问题? 我的心渐渐寒了,IT公司怎么这么没信誉呀? 关于安装qq的问题. 我看到有的文章发布系统里,有在word里直接粘贴就可以显示的JS,但我不会调用,谁知道? 一个很菜的问题 需要一个弹珠台游戏的设计思路,(windows自带的那个pinball游戏) windows 2000 中有多少中方法访问硬盘上的文件?? 文档不能删除的问题!请高手赐教,定重谢 Set object1 = object2 有关拷贝文件的问题? !!!!!!!!!如何让Memo新添加的一行使用colorbox1.selected,其他行不变????????? vb.net中的控件有無像vfp中parent屬性可以訪問上級對象?現在類中沒能訪問啊 excel一张表中最多可以保存多少行数据? javascript向jsp传递变量的问题 我想知道用tab来移动光标时突发的是什么消息?还有光标选中的虚线是怎么划的 ? 想改变单文档背景色在那个函数里设置?怎样设置? 有没有女孩对你说:”你真象我以前的男朋友!” 求救????????????? 求救????????????? 麻烦大虾看一下这几个错误,急急急!!!!!!!!!! C#中如何读取文本方式的整数向C++中的fscanf语句一样 高手帮忙 如何将Outlook Express的邮件转移到foxmail中去 如何插入图片到sql server中? 关于rave打印问题?(打印页码范围) 请教:在asp.net开发环境里,我用C#编写网站,为什么老是连接不上数据库SQL Server 2000 啊? SQL Server启动的一个问题 关于linux下解压缩的问题 非常奇怪的问题:href=question.jsp?a=&b=&c=123,当接收这些参数时,C的值为什么不是123,而是null!!! IIS菜鸟问题两个。IIS菜鸟问题两个。IIS菜鸟问题两个。IIS菜鸟问题两个。IIS菜鸟问题两个。 使用vc.net操作环境时常遇到的两个烦人问题. 硬盘低格后如何处理? 如何在图层上生成一个网络拓扑图,请高手给指点一下,多少分都行!!1 16岁伴娘婚礼上遭多人扒光摸遍全身(记者调查:中国游客满意度,柬埔寨为何格林斯潘新书反思金融危机:我为何没能为何中美趋同反而滋生冲突?日本佐贺县秋季祭孔英媒:中国首支核潜艇部队在海上巡逻以色列拟释放第二批26名长期关押巴勒多地密集推高考改革 十年寒窗学数学只安倍称不容中国“武力崛起” 外媒称中胡万林治死者父亲:胡万林是杀人应关一大学生召妓嫌对方太丑 被逼下跪道歉还中国海警编队10月28日在中国钓鱼岛上海自贸区基本运行制度创新框架已建立伊利方舟安全演练推动内蒙“平安校园”宗庆后支招新浙商创业重在创新 不要走马尼拉拟筹800至1600万赔款 多吴伯雄盼两岸主管部门负责人借设办事处南京一司机装“自动翻转号牌框”遮蔽号国民党庆祝建党119周年 推出“党证雾霾笼罩三亚令人震惊 美报称中国降低外媒:安倍告诫中国勿以武力夺岛46岁焦恩俊入围“亚洲男神”11强兰临高速两车追尾两人身亡经期不重保暖最易“招病”齐齐哈尔市委原秘书长被开除党籍移送司持玩具枪实施抢劫男子获刑3年10个月乌克兰议会批准代总统局部动员令公立医院的太平间怎能承包出去中韩启动在韩中国人民志愿军烈士遗骸装韩国将抢先为“暖炕”申遗兰州新建8个县区大型应急避难场所芝麻开门了!阿里巴巴宣布将在美上市我省严查殡葬业清明搭车乱收费行为兰州市投资近24亿确保24件实事落地春分养生 谨防感冒与胃肠道疾病“春分”健脾胃 记得吃红枣福利彩票开奖公告莫让“狼来了”在孩子身上演变草莓可有效改善忧郁心理读者心语中、高考生伤不起,低效复习该终结了!春困应与病态的“懒”区分开
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘