文档章节

IOS8 AutoLayout+SizeClasses 基础篇(1)

Carson6931
 Carson6931
发布于 2014/10/14 17:04
字数 819
阅读 1185
收藏 2

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

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


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

在底部栏可以看到

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

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

点击底部栏的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, 最后回车保存。


当然添加约束的方式很多,可以选择在左侧目录栏上按住control 从tableview连接到view,也可以直接在视图上连线。四条约束添加好后,选中tableview,打开size inspector




可以看到为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加的约束。



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

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

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


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

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


© 著作权归作者所有

共有 人打赏支持
Carson6931
粉丝 17
博文 9
码字总数 7471
作品 0
徐汇
程序员
Ruby 和 Python 分析器是如何工作的?

原文出处:Julia Evans 译文出处:开源中国 你好! 我作为一名编写Ruby profiler的先驱,我想对现有的Ruby和Python profiler如何工作进行一次调查。 这也有助于回答很多人的问题:“你怎么写...

Julia Evans
2017/12/24
0
0
如何利用 C++ 的 Lambda 表达式提升 Qt 代码

原文出处:oschina Lambda 表达式是在 C++11 中加入的 C++ 特性。在这篇文章中我们将看到如何用 Lambda 表达式来简化 Qt 代码。Lambda 很强大,但也要小心它带来的陷阱。 首先,什么是 Labm...

oschina
2017/02/09
0
0
提升网站访问速度的 SQL 查询优化技巧

原文出处:Delicious Brains 译文出处:开源中国 你一定知道,一个快速访问的网站能让用户喜欢,可以帮助网站从Google 上提高排名,可以帮助网站增加转化率。如果你看过网站性能优化方面的文...

Delicious Brains
2017/12/09
0
0
jQuery对象入门级介绍

本文由伯乐在线 -kmokidd 翻译。未经许可,禁止转载! 英文出处:smashingmagazine。欢迎加入翻译组。 你是否曾经见过像 这样的JavaScrip代码?或许你还会思考下 是什么,如果看到这些你都觉...

伯乐在线
2014/06/24
0
0
使用 ProxySQL 改进 MySQL SSL 的连接性能

原文出处:Percona 译文出处:开源中国 在这篇博文里,我们准备来看一下 ProxySQL 是如何提高 MySQL 的 SSL 连接性能的。 当用 SSL 部署 MySQL 时,主要的问题是如果没有使用连接池(例如:P...

Percona
2017/10/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java并发备忘

不安全的“先检查后执行”,代码形式如下: if(条件满足){ //这里容易出现线程安全问题//doSomething}else{//doOther} 读取-修改-写入 原子操作:使用CAS技术,即首先从V中读取...

Funcy1122
今天
0
0
SpringBoot2.0 停机

最近新建了个SpringBoot2.0的项目,因为原来一直使用的是传统的Tomcat部署war包的形式,所以这次SpringBoot内置Tomcat部署jar包的时候遇到了很多问题。其中一个就是因为没有外置的Tomcat容器...

Canaan_
昨天
0
1
Confluence 6 外部参考

一个外部参考的意思是任何站点链接到你 Confluence 的实例。任何时候当 Confluence 的用户单击这个外部链接的时候,Confluence 可以记录这次单击为参考。 在默认的情况下,外部链接的参考链接...

honeymose
昨天
0
0
Android中的设计模式之抽象工厂模式

参考 《设计模式解析》 第十一章 Abstract Factory模式 《设计模式:可复用面向对象软件的基础 》3.1 Abstract Factory 抽象工厂 对象创建型模式 《Android源码设计模式解析与实战》第6章 创...

newtrek
昨天
0
0
Redis | 地理空间(GEO)的一个坑

Redis的地理空间(Geo)是个好东西,轻轻松松的就可以把地图描点的问题处理了, 最近却遇到一个坑...Redis采用的Msater-Slave模式, 运用GEORADIUS在salve读取对应的数据,新增了从节点但是从不返...

云迹
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部