如期而至,告别坐标系,IOS相对布局之BZRelativeLayout

首先,说声抱歉,拖更了几天。

其次,这周实在是,项目紧的忙成狗!(只强调一遍)。

最后,话不多说,该分享今天的内容了。


一、概述

因为自己是安卓出身,所以,当我写IOS的时候,一开始特别不习惯,因为它是需要自己指定坐标值的,每次我们都需要自己算。此框架的灵感也是来自也android的RelativeLayout。


二、没有对比就没有伤害

小案例,比如我想让绿色的View在红色的右边,并且对齐红色View的上边,常规的布局方式(假定红色View固定不变)就会有以下几步:


1.获取红色View的宽度

2.获取红色View的X坐标

3.相加宽度和X坐标

4.设置绿色View的frame

代码如右图 

太麻烦了!习惯了安卓的布局(自动计算View宽度,位置,除了自定义View),每次都需要知道其他View的位置进行相应的坐标计算,这种方式在学习的时候就无法接受。当时就萌芽了BZRelativeLayout的想法来解决之一问题。


三、BZRelativeLayout之Frame设置

现在我们再回过头看看之前的问题,我们使用BZRelativeLayout来进行相对布局设置,只需要以下几步

1.设置宽高(无需关系坐标,保持原点默认即可)

2.绿色View addRule 在红色View的右边(对应枚举:BZRelativeRuleEndOf )

3.绿色View addRule 和红色View的上边对齐(对应枚举:BZRelativeRuleAlignTop)

代码如右图

ps:这里我们先忽略enableAutuLayout这个属性

有没有发现,我们实际为了达到预期的效果,真正只需要考虑两点:EndOf红色View,AlignTop红色View,就可以轻松的将绿色的View放到红色View的右边,同时对齐红色View的上边,我们完全不用关心坐标的问题,只需要设置相应的Rule,所有繁琐的计算都交给框架来处理,而且横竖屏切换都会兼容。


四、BZRelativeLayout之AutoLayout设置

这时有人想问,我使用的是AutoLayout,框架可以支持吗?毫无疑问,那是必须的~细心的同学会发现,上面提到的一个属性enableAutoLayout设置为NO,为什么这么设置呢?因为此框架默认方式就是AutoLayout。由于上面的方式是使用Frame来布局的,所以需要在设置之前关闭。为了适用更广,我使用的是Masonry来支持。现在我们来了解下怎么使用AutoLayout来布局

1.设置宽高(不变)

2.addRule EndOf(不变)

3.addRule AlignTop(不变)

完全一模一样,而且少了一步,不需要设置enableAutoLayout为NO

特别提醒:如果使用AutoLayout,那么在设置约束之前,必须把此View添加到父View里面,然后在添加对应的Rule,不然会直接奔溃。


五、其他

本库目前支持的属性,如下图


BZRelayoutLayout就介绍到这里,通过一个简单的使用案例,我想大家已经了解了本库的特点。目前此库已经在我们的项目中使用,我相信,此方式可以最大程度的减少我们繁琐的布局问题,从此,我们可以轻松的搞定各种布局设置。


本框架也使用Pod进行管理,可以直接访问我的Git进行学习安装:https://github.com/CBillZhang/BZRelativeLayout


特别感谢:Masonry框架给予的支持



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值