话不多说,先上图:
biaoqian.gifUI结构:UIView + UIButton。灰色的是一个容器视图,橘黄色的“标签”为UIButton。这里为什么要使用容器视图呢?因为在用到“标签”这个功能的地方上下左右很有可能有别的视图,所以使用容器视图可以很好的控制与别的视图之间的位置关系。
实现这个功能需要借助两个核心变量,btnTotalW 和 btnTotalH,顾名思义,按钮总宽度和按钮总高度。btnTotalW用于判断何时换行,btnTotalH用于改变容器视图的高度。
设1.目标宽度W(在本demo中为屏幕宽度)
2.按钮之间间距m
3.按钮索引n
4.前一个按钮的 frame 为 lastFrame
实现思路:实现依赖按钮的frame,关键点在于换行判断。
1、width使用文字长度;
2、height给固定值;
3、x取值分两种情况:
a.每行第一个按钮 x = m
b.其他按钮x = CGRectGetMaxX(lastFrame) + m
4、y取值分两种情况:
a.第一行按钮 y = m
b.其他按钮 y = CGRectGetMaxY(lastFrame) + m
如何换行:
每添加一个按钮,累加btnTotalW(_btnTotalW += width + m),如果_btnTotalW大于W,则按钮的y值按照上面4b设置。
换行之后,将btnTotalW重置为width + m,同时累加总高度(btnTotalH += height + m).以此类推。
代码一共才不到120行,想要demo的私信我吧。请多指教。
网友评论