IOS8 AutoLayout+SizeClasses 基础篇(1)

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

通过一个简单的Demo来分享下xcode6中storyboard在适配上的一些新改动。

本章主要介绍下autolayout 之后的博文中会对sizeClasses加以介绍。


新建Single View Application工程,打开Main.storyboard,发现viewController的视图尺寸变大了。这种尺寸的视图对应的是sizeClasses中的any waith 和any height也就是任意类型的屏幕(所有iOS设备,包含横竖屏)。

在底部栏可以看到

14170438_gevM.jpg

wAny hAny 正好标明当前sizeClasses处于长宽任意类型,仅在此种类型下布局在所有设备上都将拥有相同的布局。

在ios8中官方给定的设备横竖屏状态时长宽所属的sizeClasses如下图

IOS8 AutoLayout+SizeClasses 基础篇(1)_第1张图片

点击底部栏的wAny 与hAny会看到九宫格,正好是waith(compact、regular、any)*height(compact、regular、any)九种类型。

下面以tableview的适配为例加以介绍,sizeclasses依然默认为wAny hAny。拖取tableview放入viewcontroller视图中,假设我们要求所有尺寸屏幕上tableview都能铺满视图,这时我们就要用到autolayout中的 layout constraints(布局约束)给tableview加上一些约束,选中tableview,点击底部栏右下方第二个按钮,给tableview的上下左右都加上约束,0代表tableview距4个边界的距离都限定为0,同时取消constrain to margins, 最后回车保存。

IOS8 AutoLayout+SizeClasses 基础篇(1)_第2张图片
当然添加约束的方式很多,可以选择在左侧目录栏上按住control 从tableview连接到view,也可以直接在视图上连线。四条约束添加好后,选中tableview,打开size inspector


IOS8 AutoLayout+SizeClasses 基础篇(1)_第3张图片

可以看到为tableview加的四条约束,同时还可以对约束进行编辑。


下面拖放个tableviewcell放入tableview,cell默认的就是从tableview顶端显示,而且与tableview同宽,所有我们不需要为cell加约束,仅仅需要控制cell的高度,在ios8之前,cell的高度通过委托方法(heightForRowAtIndexPath)来控制,ios8中你只需要给cell中的视图加上约束,系统(UIKit)能根据你cell的内容自动帮你计算高度。

这里先简单的介绍下tableview用来显示不同高度的文本。要求label距上下左右分别为5、5、10、10,按照之前的方法加好约束。点击底部栏第三个按钮update Frames,目录栏黄色警告消失。同样在size inspector 中可以看到为label加的约束。

IOS8 AutoLayout+SizeClasses 基础篇(1)_第4张图片

之后我们可以自己加一些假的数据来查看结果,这时我们要注意!!!!!

我们还需要在viewDidLoad中为tableview添加两条代码

tableView.rowHeight = UITableViewAutomaticDimension;
//设置rowHight属性为AutomaticDimension
tableView.estimatedRowHeight =44;
//该值一般选取storyboard上布局完成后的大小

IOS8 AutoLayout+SizeClasses 基础篇(1)_第5张图片

我们并有在代码中去计算label的高度,但是通过设置label与contentview的约束即可达到自动适应的效果,这样至少省去了两处计算label高度的代码。选择不同的device都能看到很正常的显示。

autolayout既是一种通过控制view与view之间相对位置来达到的一种自动布局的效果,现在再也不用羡慕安卓不用计算文本高度了。


转载于:https://my.oschina.net/carson6931/blog/330548

你可能感兴趣的:(IOS8 AutoLayout+SizeClasses 基础篇(1))