
苹果开发教程翻译:iOS 7 自动布局教程:第2部分,Beginning Auto Layout Tutorial in iOS 7: Part 2,第三页
下载 这个教程的资源文件 ,然后解压。妳会看到一个Images目录——将这个目录添加到项目中。将Ray.png设置为该图片视图的图片属性,将该图片视图的模式设置成Aspect Fit,将它的背景颜色设置成白色。修改文本标签的文字内容,例如“Ray”。
现在,布局应当是这样的:
注意看,绿色视图里面的那些约束变成橙色了。这件事是在妳将图片拖入到图片视图中去的时候发生的。为什么妳的布局会突然变成无效的呢?幸运的是,妳不用自己去猜,让Xcode告诉妳哪里出问题了吧。点击Document Outline 中View Controller Scene 旁边的那个红色小箭头,以查看问题列表:
妳遇到了一个Content Priority Ambiguity错误。听起来狠迷惑人。它的意思是:如果图片视图和文本标签对象都没有固定的高度的话,那么,当绿色视图的高度发生变化时, 自动布局 系统不知道该如何安排里面两个视图的高度。(看起来,Interface Builder好象忽略了一点,那就是,我们实际上为绿色视图设置了一个固定高度(Height)约束。)
假设,在某个时候,妳的应用程序中,绿色视图的高度增加了100点。 自动布局 怎么知道,这 100 点的空间应该怎么在文本标签和图片视图之间分配?是让图片视图的高度增加100点,而让文本标签保持尺寸不变?或者,让文本标签的高度增加,而让图片视图的尺寸保持不变?是让它们各增大50点的高度,还是分配为25/75、40/60或是其它的组合?
如果妳不解决这个问题的话,那么, 自动布局 系统就需要进行猜测,其结果就是不可预料的。
正确的解决方法是,设置文本标签对象的“Content Compression Resistance Priority”。妳将在日后学到更多相关信息。此刻,先解决眼前的问题,切换到该文本标签对象的Size inspector,将它的竖直方向的(vertical)Content Compression Resistance Priority设置为751。这会使得它比图片视图的优先级(priority)要大1.仍然在这个界面上,将Content Hugging Priority设置为252。
现在,那些工型符号应当重新变成蓝色了, 自动布局 的警告也消失了。
加入其它的头像
将这个绿色视图拖放到主视图的左上角去。记住,绿色视图本身还具有Horizontal Space和Vertical Space约束呢,它们决定了绿色视图在亲代视图中的位置。这些约束仍然存在,此时,它们导致该视图的位置“放偏了”。
要想修复这个问题,就按下Resolve Auto Layout Issues按钮,然后选择Update Constraints。之前,遇到这种情况时,妳使用的是Update Frames,那种选项会移动该视图并且改变它的尺寸以迁就当前的约束。此处,妳要做相反的事:妳想要这些约束更新自己的值以迁就该视图当前的几何属性。
注意,此时,顶部的Vertical Space约束变成负值了。这是因为,这个约束是关联到顶部布局参考线(Top Layout Guide)的。但是,没人说过,约束不能为负值,所以,妳不用管这个。(如果妳实在看着这个不爽,那么,删除已有的“Vertical Space (-20)”约束,而重新加入一个约束,让该视图与窗口的顶部对齐。)
现在,Horizontal Space的值为0,并且,它是由一条厚厚的与窗口左边缘重叠的蓝色实线来表示的。所以说,即使该视图是完全处于角落处的,它仍然需要用约束来表明它的位置:
选中绿色视图,按下⌘D键来创建一个副本。将该副本移动到右上角:
注意看,工型符号是橙色的。当妳创建副本时,它丢失了与自己的X和Y坐标相关的约束。要修复这个问题的话,将这个视图的位置设置为与窗口的顶部和右边缘对齐。
再次创建两个副本,并且分别将它们移动到左下角和右下角。同样地,让它们与角落对齐。
将屏幕布局修改成以下这个样子:
这些都是优秀的程序猿!:-)
未知美人
未知美人
未知美人
HxLauncher: Launch Android applications by voice commands