闲聊

现在是7月30日夜间10点15分,闲聊这里改了又删删了又改,不知道说什么,在一次项目开发任务中,我遇到了一个在 tableView 屏幕视图下添加一个按钮,使 tableView 在上下拉动的时候 button 可以不受它上下拉动的影响,保持独立固定的问题,它要么不显示,要么就跟着一起被拖动,要么就是显示的位置和样式和自己的期望不一致。
这几个问题花了我好几天的时间,从周导、Tinker 的提示, baidu、google、bing、stackOverflow 获得的大量的信息,用另外一个 .m 文件来包含它,让它显示在 tableView 之上,虽然解决了显示的问题,但是依然觉得不够完美,强迫症在作怪,我想让他放在一个文件里面,在一个文件里面自由定制它们。0.0

这促使了我更进一步学习屏幕布局。

开始

我觉得一开始非常有必要的了解屏幕坐标体系。
而这一切就藏在 view 的两个方法(其实还有个 center ,暂时就这两个参数吧):

frame和bounds

frame 指的是 当前的 view 在父 view 的坐标大小,而 bounds 指的是当前自己的 view 坐标大小。

我目前对他们的理解是:他们的区别仅仅在于坐标值不同。

frame和bounds的区别

CGRectMake()

通常我们在初始化一个 view 的时候会常见一个函数:

CGRectMake()

苹果官方文档介绍的很直白,值得留意的是,它前面的两个参数: CGFloat x, CGFloat y, 参考上面介绍 frame和bounds 的图,x, y 的原坐标 (0,0) 是从左上角开始的。

例如初始化一个坐标x,y 都为50,宽度和高度都为 200 的 View;

cgretcmake

背景基本就这些

实现

下面通过代码来解析。

如图,这个 demo 主要实现在有 tableView 情况下,如何在屏幕底部固定一个按钮,当然了,也可以很多个按钮。。

demo2

直观上看,这个 demo 包含了三个 view , 分别是 导航栏、tableView 和 button ,这三个都继承于 UIView ,它们的宽度相同,区别个高度,位置坐标。别问我为什么还有一个导航栏,我喜欢怎么加就怎么加?。 我的要求是,可以自由对他们进行调整,就算有一个被隐藏了,看不见,也不影响其他 view 的在屏幕中的坐标位置以及大小。简单说,就是精准布局。

上代码。

比如你现在注释掉第 34 行;

run 一下:

注释34行

又或者注释 33 和 35 行

注释33和35行

So,它不管哪个模块被隐藏了,只要能理解 view 这frame、bounds、CGRectMake,这三个东西,我个人认为从此布局就简单多了。??

用 masonry 实现

这个明天发。。

总结

因为专注了,所以细节很深刻,欢迎指正。

发表评论

电子邮件地址不会被公开。 必填项已用*标注