iOS开发~UI布局(二)storyboard中autolayout和size class的使用详解

1、概要:前一篇初步的描述了size class的概念,那么实际中如何使用呢,下面两个问题是咱们必定会遇到的:

一、Xcode6中增长了size class,在storyboard中如何使用?布局

二、auto layout该如何与size class配合来进行UI布局?.net

 

2、了解一件新事物的最好的办法就是实践,让咱们揭开那神秘的面纱:设计

例子一、新建一个Single View Application template项目Demo1,拖拽一个newView到rootView上,并设置背景色为绿色, 而后不作任何其余修改,运行项目,模拟器选择iPhone6,运行效果如图:调试

横屏:code

 

竖屏:get

 

把模拟器更改成iPad、iPhone4s等,而后再旋转屏幕,发现绿色的newView的位置几乎没有变化。查看Document Outline发现没有任何constraint(约束)做用于绿色view上,理论上若是一个view没有任何constraint,那么view将没有位置及大小,但目前来看是没问题的,何解?it



查看view的size inspector,发现秘密了:io

原来若是不给一个view添加任何constraint,系统会自动给view添加左、上、宽、高四个约束,就是说新绿色的view会有固定的宽和高,而后以屏幕左上角为参考点,有一个系统添加的默认位置。(若是咱们向绿色view添加任何其余约束,那么系统自动添加的约束将实效)class

 

还有一个问题是,刚刚切换了不少不一样类型的模拟器,至关于切换了不一样的size class,但显示绿色view都正常,而size class的存在的目的就是为了区分不一样的size class(例如:iPhone4s横屏wCompact/hCompact,iPhone4s竖屏wCompact/hRegular,iPad横竖屏都是wRegular/hRegular),而后来作不一样的UI布局,何解?date

查看当前的size class:

 

当前的size class为wAny/hAny,也就是说在size class为wAny/hAny的时候添加constraint,在其余size class的时候也生效。其实从字面上也能够看出,Any就是任何的意思,Compact和Regular是Any的子类。

 

例子二、基于iPhone适配界面,添加三个view到rootView上,而后不管横屏仍是竖屏,新添加的三个view之间及与屏幕边框的距离都保持不变的间距20点宽,效果如图:

       

新建一个Single View Application template项目Demo2,由于要适配iPhone横竖屏,因此修改size class为wCompact/hRegular来适配竖屏:

拖拽3个view到rootView上,并设置其背景颜色

为了知足设计要求,要添加以下constraint:

(1)设定绿色view距离superview左边距和上边距;

(2)设定黄色view距离superview右边距和上边距,相对绿色view的的左边距;

(3)设定蓝色view的左边距和右边距和下边距,上边距离绿色view下边的距离;

(4)设定绿色view与黄色view等宽

(5)设定蓝色view与绿色view等高

如今开始动手吧:选中绿色view,Eidtor->Pin->Leading Space to Superview给绿色view添加相对其superview的左边距,而后选中constraint,修改约束的值为20,其余constraint以此类推:

添加完如图:

 

其中红色框部分清晰的表达了所添加的constraint;

蓝色框部分时添加的constraint,目前为黄色线,代表当前的constraint还不能定位view,当一个view的constraint正确的时候,constraint的颜色会变为蓝色。

绿色线框的部分表达了constraint的数值,咱们想让边距为20,因此设置数值为20 。wC hR Installed代表当前constraint适用于wC hR这种size class,不适合any any的size class。

添加绿色view与黄色view以前的距离时候,因为是设定两个子view的constraint,因此要选中两个view,而后Editor->Pin ->Horizontal,设定值为20:

一样方法Editor->Pin ->Width Equally,设定绿色view与黄色view等宽度,蓝色view与绿色view等高,结果如图:

 

但发现constraint颜色仍而后黄色,缘由是当前view的位置和constraint但愿的不一致,更新下frame(要选中3个view,由于constraint关联3个view)或者点击Document Outline中的黄色小箭头,而后会看到具体的constraint信息来一步步调试,这个也是Xcode6最有突破的地方:

而后效果如图:

而后运行下项目吧,发现确实和预期的同样。而后旋转屏幕,是否是发现横屏时候白了,屏幕什么都没有了?缘由是咱们仅仅适配的竖屏,横屏尚未适配啊!

修改size class,iPhone4s横屏的size class为wCompact/hCompact,而iPhone6 plus为wReguage/hCompact,那咱们不如设置为wAny/hCompact吧!而后安装上边适配竖屏的方式适配横屏。适配好后再次运行,横竖屏都应该是咱们想要的了。

完整项目下载

 

例子三、新建一个Single View Application template项目Demo3,添加一个view,是这个view的宽度和高度都是100点宽,而且始终居中于superview,效果如图:

这个例子很简单,也很容易实现,目的是补充以上两个例子没有说起到的一些细节。

在rootView上添加一个view,设定背景色为绿色:

因为不打算区分是哪一种iOS设备,因此size class选择wAny/hAny,而后绿色的view随便放到superview上就能够,Auto Layout的理念就是不用去管具体view的frame,要注意的是这个view最终想如何的显示,属于基于目的设计的范畴。

这个例子要完成两件事情:

(1)设定约束使view的宽和高为100点宽

(2)设定约束使view始终居中于superview

先作第(1)件事:选中view,而后Editor->Pin->Width,设定为100,一样方法设定Height

         

而后第(2)件是让view居中:仍是选中view,而后Editor ->Aligh ->Horizontal Center in Container,一样方法设定垂直居中对齐:

而后会发现Document Outline右上角有一个黄色小箭头:

点击黄色箭头进入structure页面,能够看到一些提示信息,能够了解当前布局存在问题,指导下一步该作什么。在view中看到一个黄色虚线框,这个框表明目前约束获得的view,在structure页面有一个黄色的点,点击后会提示你如何修改:

 

选择Update Frame就是按照当前的约束去更新view,选择Update Constains是按照拖拽进去view的frame更新约束。在这个例子中Update Frame是咱们须要的。而后运行项目看看是否是咱们想要的效果吧!

相关文章
相关标签/搜索