书海网短评:
适读人群:本书适合想快速、高效地开发UI,想学习InterfaceBuilder的各个层次的开发人员阅读,对于iOS的UI学习来说,本书也具有很强的指导意义。 使用InterfaceBuilder是UI开发的大势所
使用InterfaceBuilder是UI开发的大势所趋。
这是一本详细讲解如何使用InterfaceBuilder的书籍,主要讲解如何利用InterfaceBuilder快速、高效地开发UI。《iOS UI开发捷径――利用Interface Builder高效、优雅地开发UI》从InterfaceBuilder菜单、UIKit控件这些基础知识到如何使用InterfaceBuilder鲜为人知的高级功能、如何利用InterfaceBuilder进行代码的优化等都进行了详细讲解,内容覆盖了利用InterfaceBuilder开发UI所涉及的各个知识点。除此之外,《iOS UI开发捷径――利用Interface Builder高效、优雅地开发UI》还着重介绍了经常与InterfaceBuilder配合使用的AutoLayout,以及很多与UI学习甚至与iOS开发学习相关的知识。《iOS UI开发捷径――利用Interface Builder高效、优雅地开发UI》理论与实践相结合,理论部分全面而且深入,让读者知其所以然,实践部分不仅讲到了在开发中经常遇到的情况,而且也关注了一些非常重要的细节。《iOS UI开发捷径――利用Interface Builder高效、优雅地开发UI》适合想快速、高效地开发UI,想学习InterfaceBuilder的各个层次的开发人员阅读,对于iOS的UI学习来说,《iOS UI开发捷径――利用Interface Builder高效、优雅地开发UI》也具有很强的指导意义。
郭晓亮
一直奋斗在iOS开发一线的大龄“码农”,从iOS4开始就与Xcode”纠缠”,像大多数人一样,默默地享受着技术带来的快乐和成就感;像大多数人一样,没有干过“惊天动地”的项目,但岁月磨灭不了一颗热爱技术的心。
对于大部分iOS开发者来说,UI开发是日常工作的重要部分。快速高质地完成UI部分的开发,不仅对项目起到关键作用,还涉及开发者自身的生活品质。《iOS UI开发捷径――利用Interface Builder高效、优雅地开发UI》作者结合自己实践经验,细致讲解了使用相关工具来高效且优雅地进行UI开发的方方面面。相信书中的知识点会成为你的开发工具箱中的一件利器。
王巍(@onevcat),专注于iOS的开发者、ObjC中国组织发起人
优秀的开发者应该想尽办法把自己从重复劳动中解脱出来,IB无疑是UI开发的一件利器,像视图创建、属性设置、布局、跳转等烦琐代码都可以变成IB里的可视化的操作,熟练地使用它将大幅减少UI的开发和维护时间。《iOS UI开发捷径――利用Interface Builder高效、优雅地开发UI》作为IB的专题书,作者以丰富的经验分享了从基础用法、实践再到进阶技巧等很多内容,如果你正要学习使用IB,那么《iOS UI开发捷径――利用Interface Builder高效、优雅地开发UI》将是你的不二之选。
孙源(sunnyxx),资深iOS开发者、博主,热爱分享和开源
如果你对InterfaceBuilder心存抵触,特别是对StoryBoard没有好感,那你可能是漏掉了一些正确的使用方式,或者是忽略了一些小技巧。《iOS UI开发捷径――利用Interface Builder高效、优雅地开发UI》从基本的概念讲起,内容穿插了作者丰富的实践经历,并介绍了我们可能很少接触,但又非常实用的方法,诸如Object、参考线等。现在讲解基础概念的文档书籍非常多,《iOS UI开发捷径――利用Interface Builder高效、优雅地开发UI》却专注在你可能不知道的InterfaceBuilder的知识。
靛青K,SwiftGG成员、InfoQ主编
第1章InterfaceBuilder概要.........................................1
1.1InterfaceBuilder简介1
1.1.1InterfaceBuilder是什么1
1.1.2xib是什么2
1.1.3拓展学习:Bundle概念的理解4
1.1.4理解Bundle对于IB的指导意义5
1.1.5storyboard是什么5
1.1.6nib是什么6
1.1.7storyboardc是什么8
1.2InterfaceBuilder的优点9
1.2.1开发和维护效率高9
1.2.2减少大量的UI代码和“胶水代码”10
1.2.3适配变得十分简单10
1.2.4IB也可以做一些非UI的事情11
1.2.5利用IB学习控件可以达到事半功倍的效果11
1.3InterfaceBuilder的缺点11
1.3.1IB的执行效率没有纯代码高12
1.3.2使用IB开发的过程中容易出现一些小问题12
1.3.3有一定的学习成本13
1.3.4文件易冲突13
1.3.5没有代码表达清晰13
1.3.6不利于代码的封装和工程架构的组织13
1.4InterfaceBuilder学习的特点14
1.4.1简单、容易入门14
1.4.2容易犯错误14
1.4.3有很多“坑”,需要积累属于自己的经验14
1.5InterfaceBuilder的发展15
1.6拓展学习:CocoaPods15
1.6.1CocoaPods介绍15
1.6.2Podfile文件与CocoaPods的三种依赖方式17
1.6.3podspec文件18
第2章使用InterfaceBuilder.........................................21
2.1解决冲突21
2.1.1解决普通IB文件冲突21
2.1.2解决Xcode8引起的IB文件冲突22
2.2创建xib文件24
2.3“关联”xib文件与源文件24
2.3.1“关联”xib文件与UIView子类的源文件25
2.3.2@IBOutlet与@IBAction26
2.3.3拓展学习:设计模式之MVC29
2.3.4理解File’sOwner32
2.3.5“关联”xib文件与UIViewController子类的源文件33
2.3.6总结xib“关联”源文件34
2.4使用xib36
2.4.1使用与UIView子类源文件关联的xib37
2.4.2使用与UIViewController子类源文件关联的xib44
2.4.3xib嵌套使用的问题46
2.4.4深入学习:加载非mainbundle中的资源48
2.5拓展学习:创建Bundle51
2.5.1使用简单的方法创建普通的Bundle51
2.5.2创建基于macOSBundle的Target来获得Bundle51
2.6创建storyboard53
2.7使用storyboard54
2.8对比xib和storyboard的使用情况55
2.9拓展学习:App启动过程分析与UIApplication自定义举例56
第3章全面学习xib..................................................63
3.1操作页面63
3.2介绍Utilities中的检查器64
3.2.1ShowtheFileinspector(文件检查器)65
3.2.2ShowQuickHelpinspector(快速帮助检查器)67
3.2.3ShowtheIdentityinspector(ID检查器)67
3.2.4ShowtheAttributesinspector(属性检查器)69
3.2.5ShowtheSizeinspector(尺寸检查器)85
3.2.6ShowtheConnectionsinspector(连接检查器)87
3.2.7“连线”方式总结88
3.3ShowtheObjectlibrary菜单91
3.4在xib中使用UITableView94
3.4.1将基于sb的工程变成基于xib的工程94
3.4.2利用xib简单展示UITableView95
3.4.3利用xib自定义UITableViewCell96
3.4.4利用xib自定义UITableViewCell的使用99
3.5AssetCatalog100
3.5.1使用AssetCatalog101
3.5.2AssetCatalog的优缺点104
第4章在InterfaceBuilder中使用AutoLayout........................105
4.1IB与AutoLayout105
4.1.1学习AutoLayout的特点105
4.1.2在IB中使用AutoLayout的优缺点106
4.2深刻理解AutoLayout106
4.2.1如何理解“AutoLayout有别于frame系统”107
4.2.2如何理解“添加约束”110
4.2.3如何理解“间接表示”111
4.3约束112
4.3.1AutoLayout的数学公式112
4.3.2约束属性113
4.3.3约束关系114
4.3.4multiplier与constant115
4.3.5约束的创建与添加115
4.3.6约束的优先级119
4.4AutoLayout相关菜单介绍120
4.4.1Updateframes介绍120
4.4.2EmbedInStack介绍123
4.4.3Align介绍124
4.4.4AddNewConstraints介绍125
4.4.5ResolveAutoLayoutIssues介绍127
4.5ShowtheSizeinspector再介绍128
4.5.1Constraints菜单128
4.5.2IntrinsicSize――固有尺寸130
4.5.3ContentCompressionResistance――压缩阻力131
4.5.4ContentHugging――内容吸附133
4.5.5使用NSLayoutConstraint与@IBOutlet“连线”134
4.6设置约束的方法介绍135
4.6.1在IB中设置约束135
4.6.2用苹果原生的API设置约束136
4.6.3用VFL(VisualFormatLanguage)设置约束138
4.6.4通过第三方库设置约束139
4.7在InterfaceBuilder中使用AutoLayout进行布局的实践140
4.7.1用AutoLayout布局拨打电话页面142
4.7.2stackView的使用148
4.7.3拓展学习:FDStackView151
4.7.4拓展学习:“黑魔法”――实现在低版本中使用高版本中才存在的类152
4.7.5AutoLayout的异类――UIScrollView159
第5章storyboard全面学习..........................................164
5.1Inspector其他菜单和标签的使用165
5.1.1使用ViewController165
5.1.2使用PageViewController167
5.1.3使用TableViewCell169
5.2使用ExtraView171
5.3使用storyboard中的segue173
5.3.1使用RelationshipSegue173
5.3.2常见的Segue选项175
5.3.3如何利用Segue传参178
5.3.4更灵活的segue179
5.3.5自定义的segue180
5.3.6拓展学习:iOS中内存管理简介181
5.3.7深入学习:EmbedSegue184
5.3.8EmbedSegue与UIPageViewController的配合使用188
5.3.9深入学习:Unwindsegue193
5.4在sb中使用UITableView198
5.4.1在sb中使用自定义tableViewCell199
5.4.2在sb中给UITableView添加tableHeaderView和tableFooterView203
5.4.3segue在UITableView中的使用204
5.4.4在sb中使用静态cell205
5.5在sb中使用UICollectionView208
5.6UseasLaunchScreen212
5.6.1LaunchScreen的使用212
5.6.2使用LaunchScreen的好处213
第6章InterfaceBuilder进阶.........................................217
6.1UseTraitVariations217
6.2UserDefineRuntimeAttribute222
6.3IB文件的加载过程224
6.4本地化228
6.4.1本地化的介绍228
6.4.2文本的本地化230
6.4.3Info.plist的本地化234
6.4.4图片资源的本地化235
6.4.5App内设置语言的本地化236
6.5StoryboardReference的使用240
6.6使用RBStoryboardLink242
6.7用Object重构“神VC”244
6.7.1使用Object245
6.7.2用Object重构“神VC”的思路248
6.7.3如何用好Object250
6.8用ExternalObject重构“神VC”251
6.8.1xib中ExternalObject的使用251
6.8.2用ExternalObject重构“神VC”的思路253
6.8.3Object和ExternalObject总结254
6.9IB中的关键字总结256
6.9.1@IBAction256
6.9.2@IBOutlet257
6.9.3@IBDesignable258
6.9.4@IBInspectable263
6.9.5UserDefinedRuntimeAttributes、@IBDesignable、@IBInspectable总结265
第7章在InterfaceBuilder开发中的技巧和bug.......................268
7.1调整View的尺寸,使它与显示内容的尺寸相适应268
7.2查看各个View之间的距离269
7.3在IB中添加参考线269
7.4快速调整底层被挡住View的位置270
7.5快速查看View的UI层次关系271
7.6“连线”小技巧272
7.7使用“吸管”快速设置颜色273
7.8IB中的复制与粘贴274
7.9利用MediaLibrary快速设置图片274
7.10IB开发中遇到的一些小bug275









