给护照App增加更多功能~第七章练习Building More on the Passport App

本章练习我们继续使用第五章和第六章的练习Passport App,在本章练习中,Passport App会增加Auto Layout功能,App的界面会随着不同的设备(iPhone、iPad)不同方向(横屏、竖屏)进行自适应和自我调节(见图7-18)。

图7-18

Exercise: Building More on the Passport App | Page 201

打开Passport工程,点击Project Navigator中的Passport,显示工程详细信息。往下滑把Devices设置成Universal,接着勾选Upside Down、Landscape Left、Landscape Right。然后打开Images.xcassets文件,选中AppIcon,敲击键盘删除键。接着在白色的sidebar点击鼠标右键,选择New App Icon,一个全新的iPad和iPhone应用图标格子出现。然后打开图标文件夹,把对应的图标拖动到对应的格子中。

模拟器选择下拉菜单顶部工具栏Passport字样的右边。

下拉菜单中包括了所有当前模拟器可用的设备(见图7-19)。选择iPad Air,点击Play按钮。现在iOS模拟器启动iPad Air样式。

图7-19

iPad Air的模拟器非常大,所以要调小一些,点击模拟器,然后顶部菜单选择Window -> Scale -> 50%(见图7-20)。iPad Air模拟器会调整成标准尺寸的50%。

图7-20

Page 202 | Chapter 7: Devices and Auto Layout

Passport App在iPad上看起来并不好看。图片的位置变化了,然后labels也偏移了位置(见图7-21)。这是因为当前的控件位置使用的是固定的宽高坐标。

图7-21

你需要把控件位置设置成Auto Layout。打开Main.storyboard文件,选择File Inspector(见图7-22),勾选Use Auto Layout,勾选Use Size Classes。点击Enable Size Classes(见图7-23)

图7-22
图7-23

Exercise: Building More on the Passport App | Page 203

Size classes用来调整不同设备下的布局,现在我们可以使用Auto Layout了,要使用Auto Layout,首先我们要给控件增加约束(constraints)。打开Passport Scene。

Page 204 | Chapter 7: Devices and Auto Layout

借助辅助线把Image View放到界面的中间,然后把Image View往上移动直到上方出现一条水平的辅助线。点击Align按钮,选择Horizontal Center in Container,然后点击Add 1 Constraint。接着点击Pin按钮,上下左右四个方向选中上方竖线,值从下拉框中选择Use Standard Value,选中Width和Height两个选项,点击Add 3 Constraints(见图7-24)。

图7-24

把右侧的三个Label放到Image View的右侧下方,Label的右边距和Image View的右边距相同对齐,选中这三个右侧Label,点击Align按钮,勾选Trailing Edges选项,点击Add Constraints。然后点击Pin按钮,勾选上方向竖线,选择Use Standard Value,Update Frames选项下拉选择Items of New Constraints,点击Add Constraints(见图7-25)。

图7-25

Exercise: Building More on the Passport App | Page 205

把左侧的三个Label放到Image View的左侧下方,Label的左边距和Image View的左边距相同对齐,选中这三个左侧Label,点击Align按钮,勾选Leading Edges选项,点击Add Constraints。然后点击Pin按钮,勾选上方向竖线,选择Use Standard Value,Update Frames选项下拉选择Items of New Constraints,点击Add Constraints(见图7-26)。

图7-26

Page 206 | Chapter 7: Devices and Auto Layout

选中按钮,借助辅助线把按钮放到水平居中的位置,放到Label的下方。点击Align按钮,勾选Horizontal Center in Container,点击Add 1 Constraint,最后点击Pin按钮,勾选上方向竖线,选择Use Current Canvas Value,点击Add 1 Constraint(见图7-27)。

图7-27

刚刚设置的这些约束会应用到所有的size classes和layouts中。现在,我们要为某个size class设置单独的约束了。点击最下方的“Any,Any”,会出现一个小的格子框,这里控制着当前我们编辑的是哪个size class,点击格子框的右下角(见图7-28),这个size class是用来设计iPad的横屏和竖屏。

图7-28

Exercise: Building More on the Passport App | Page 207

选中Image View,一条蓝色竖线出现在Image View的右侧,这时Image View的高度约束,双击这条约束,把值由225改为400,接着双击Image View下方的蓝色竖线,这是宽度约束,双击,把值由225改为400。Image View的大小已经重新设定了,Label和Button会自动调整它们的位置(见图7-29)。

图7-29

Page 208 | Chapter 7: Devices and Auto Layout

想要预览刚刚修改的约束效果,我们可以使用Previewer,在打开Previewer之前,我们最好给窗口腾出一些屏幕空间来,隐藏Project Navigator和Inspector,打开Assistant Editor,就是两个圆圈相交的图标,在Assistant Editor的工具栏中,点击Automatic,会出现一个下拉菜单,选择Preview -> Main.storyboard(Preview)(见图7-30)。

图7-30

右侧出现了一个4英寸iPhone的预览图,点击左下角的加号,选择iPad,一个iPad的预览效果就出现在Previewer中了(见图7-31)。现在各个控件在iPad上的效果看起来好多了。点击iPad preview下方的弯曲箭头,就可以调整iPad的方向,虽然方向变化了,但是控件的位置还是放置正确,调整一下4英寸iPhone,方向变化后,界面看起来不太友好了,各个控件的位置似乎并不合适。

图7-31

Exercise: Building More on the Passport App | Page 209

在最下方点击“Regular,Regular”,然后点击最上边一行格子的中间的那个格子,这时size class变成了“Any,Compact”(见图7-32)。这个size class是用来设计iPhone横屏的效果,这时界面会调整方向,有些控件会无法出现在界面中。为了解决这个问题,我们需要从顶部菜单栏中点击Edit -> Select All,这样所有的控件都选中了,把Image View拖到界面的最顶部,所有的控件都显示出来了。

图7-32

Page 210 | Chapter 7: Devices and Auto Layout

这个size class需要全新的Layout(见图7-33)。点击Resolve Auto Layout Issues按钮,选择最下边的Clear Constraints,这样就会清除这个size class下的所有约束条件。接着把Image View放到屏幕的左上方,直到左边和上方都出现了辅助线,选中Image View,点击Pin按钮,勾选上方方向竖线,选择Use Standard Value,左侧方向竖线,选择Use Current Canvas Value。勾选Width和Height选项,点击Add Constraints,把Label和Button放到图片右侧上方,直到上方出现了辅助线,以及Image View的右侧也出现了辅助线,点击Pin按钮,上方方向竖线选择Use Standard Value,左侧方向竖线,选择Use Current Canvas Value,点击Add Constraints。

图7-33

所有的设置都已经完成了,可以对App进行测试了,模拟器选择iPhone 5s,点击Play按钮(Command+R),选择Hardware -> Rotate Right(Command+方向键)(见图7-34),在iPad Air上运行也没有问题(见图7-35)

图7-34
图7-35

Exercise: Building More on the Passport App | Page 211

如果App没有按照你想要的结果运行,或者程序有了错误或警告,不要太担心,学习的最佳方式就是试错,熟能生巧,到我们的网站上下载示例代码,对比一下代码,多试几次,直到搞定这个程序为止。

Page 212 | Chapter 7: Devices and Auto Layout

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 161,192评论 4 369
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,186评论 1 303
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,844评论 0 252
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,471评论 0 217
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,876评论 3 294
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,891评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,068评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,791评论 0 205
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,539评论 1 249
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,772评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,250评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,577评论 3 260
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,244评论 3 241
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,146评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,949评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,995评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,812评论 2 276

推荐阅读更多精彩内容