资讯专栏INFORMATION COLUMN

AutoLayout的一些使用心得

_DangJin / 1698人阅读

摘要:上周终于把前段的密集课程及考试什么的完成了,有时间来下里的代码。虽说代码好像写了不少,但能说的好像不太多这篇准备说下使用的一些感受。实现方式实现总体上说有两种方式,一种是在里直接设置,另一种是使用代码。

上周终于把前段的密集课程及考试什么的完成了,有时间来review下YoNote里的代码。虽说代码好像写了不少,但能说的好像不太多==这篇准备说下使用AutoLayout的一些感受。

概述 AutoLayout是什么

我的理解是,AutoLayout是通过对界面上各个元素设定约束,来达到在各个不同设备上统一布局的目的。

AutoLayout实现方式

实现AutoLayout总体上说有两种方式,一种是在Xib里直接设置,另一种是使用代码。其中使用代码的方式常用的有以下几种:

苹果自己的AutoLayout方法

第三方库PureLayout

第三方库Masonry

别的...

对我来说,苹果那堆代码太繁琐抽象,Masonry没去看过==,所以要么用Xib,要么用PureLayout。到底选用哪一种,一般取决于需要布局的元素的复杂程度。如果需要控制的元素很多或者是一个View上有很多子View,我会选择用Xib,毕竟代码写起来太费时间了;相反,如果界面不复杂、要控制的元素比较少,或者元素可能会发生变化,我会考虑用代码,使用啊或者控制方便一些。

到底应该怎么布局

这个我还不能像某大神那么自信地说“什么界面都能在两(半)小时里做出来”链接,偶尔有的元素还是会不乖乱跑,但是大体上有个思路。

我的思路是抓住主要矛盾,在布局中到底是哪个元素是“自变量”,因为它别的元素的位置才会跟着变化,先确定自变量,别的元素跟着就确定下来了。

一个例子


比如YoNote的ItemCell,效果图如下:

分析可以知道它的问题在于memoLabel内容显示这个view必须固定在左上方,而且与collectionLabel的距离是固定的;同时imageView也必须固定在右边。
具体来说,在这个cell里面,memoLabel和imageView是必须首先固定的,因为三个label都与imageView有一定的距离,这个距离只有当imageView固定之后才能确定;同样,collectionLabel与memoLabel的距离也只有当memoLabel固定之后才能确定。

于是,按这个思路,先固定imageView(与父视图contentView的上下右距离确定)

[self.iv autoPinEdgesToSuperviewEdgesWithInsets:ALEdgeInsetsMake(kLabelVerticalInsets, kLabelHorizontalInsets, kLabelVerticalInsets, kLabelHorizontalInsets) excludingEdge:ALEdgeLeading];

然后是memoLabel,与父视图的左边及上边确定,然后确定高度以及和imageView的距离。(宽度不用管了,左边与父视图的距离以及右边与imageView的距离确定就能确定宽度,高度一定要固定,方能固定collectionLabel)

[self.memoLabel autoPinEdgeToSuperviewEdge:ALEdgeTop withInset:kLabelVerticalInsets];  
[self.memoLabel autoPinEdgeToSuperviewEdge:ALEdgeLeading withInset:kLabelHorizontalInsets];
[self.memoLabel autoSetDimension:ALDimensionHeight toSize:kMemoLabelHeightToSize];
[self.memoLabel autoPinEdge:ALEdgeTrailing toEdge:ALEdgeLeading ofView:self.iv withOffset:-kLabelHorizontalInsets relation:NSLayoutRelationLessThanOrEqual];

最后是collectionLabel和tagLabel,与父视图保持左边的距离,同时collectionLabel与memoLabel以及tagLabel在上下保持距离。

[self.collectionNameLabel autoPinEdgeToSuperviewEdge:ALEdgeLeading withInset:kLabelHorizontalInsets];
[self.tagLabel autoPinEdgeToSuperviewEdge:ALEdgeLeading withInset:kLabelHorizontalInsets];
[self.collectionNameLabel autoPinEdge:ALEdgeTop toEdge:ALEdgeBottom ofView:self.memoLabel withOffset:kLabelVerticalInsets];
[self.collectionNameLabel autoPinEdge:ALEdgeBottom toEdge:ALEdgeTop ofView:self.tagLabel withOffset:-kLabelVerticalInsets];

Done!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/15716.html

相关文章

  • Auto Layout 使用心得(一)—— 初体验

    摘要:核心思想本质分析的本质是依靠某几项约束条件来达到对某一个元素的定位。我们可以在某个地方只使用一个约束,以达到一个小目的,例如防止内容遮盖防止边界溢出等。下一步使用心得二实现三等分原文发表在我的个人网站使用心得一初体验 本系列文章将从一个慢慢摸索中的新手的角度介绍 Auto Layout,讲述我在这两个月的学习中对它一点一滴的感受,最终目的是让大家在阅读完之后能够自己上手使用,并完成绝大...

    WrBug 评论0 收藏0
  • 从此爱上iOS Autolayout

    摘要:二为啥我要用随着寸寸在市面同时使用越来越多,以及即将上市的,不同尺寸不同分辨率的设备将会越来越多,使用传统布局的工作量必将越来越大加上苹果发出的信号,使用势在必行。再看看苹果的态度,默认就是选择了使用。 这篇不是autolayout教程,只是autolayout动员文章和经验之谈,在本文第五节友情链接和推荐中,我将附上足够大家熟练使用autolayout的教程。这篇文章两个月前就想写下...

    yibinnn 评论0 收藏0
  • Auto Layout 使用心得(六)—— 制造炫酷下拉刷新动画

    摘要:原文发表在我的个人网站使用心得六制造炫酷的下拉刷新动画此系列文章代码仓库在,有不明白的地方可以参考我的设置哦,下载到本地打开就可以了。简介本文中,我们将一起使用技术制造一个炫酷的下拉刷新动画。 原文发表在我的个人网站:Auto Layout 使用心得(六)—— 制造炫酷的下拉刷新动画 此系列文章代码仓库在 https://github.com/johnlui/AutoLay...

    shaonbean 评论0 收藏0
  • Auto Layout 使用心得(二)—— 实现三等分

    摘要:三者高度恒定,宽度相等。干货,实现过程的动图运行结果寸寸纵向三等分实现方式类似,大家可以自己尝试一下哦下一步使用心得三自定义并使用原文发表在我的个人网站使用心得二实现三等分 此系列文章代码仓库在 https://github.com/johnlui/AutoLayout ,有不明白的地方可以参考我的 Auto Layout 设置哦,下载到本地打开就可以了。 准备 上一篇文章...

    stdying 评论0 收藏0
  • Auto Layout 使用心得(四)—— 22 行代码实现拖动回弹

    摘要:简介本文中,我们将一起使用和,通过行代码实现拖动回弹效果。搭建界面删除首页中间的按钮,添加一个,设置一种背景色便于辨认,然后对其进行绝对约束拖动一个到该上界面搭建完成。 此系列文章代码仓库在 https://github.com/johnlui/AutoLayout ,有不明白的地方可以参考我的 Auto Layout 设置哦,下载到本地打开就可以了。 简介 本文中,我们将...

    史占广 评论0 收藏0

发表评论

0条评论

_DangJin

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<