Sian 发表于 2014-8-9 22:41:44

同时创建多个按钮时实现自动排列

本帖最后由 Sian 于 2014-8-9 22:47 编辑

1、应用场景
1.1、当一个页面需要部署多个相同子控件时
1.2、当需要对多个控件或元素统一布局时

2、解决方案
最笨的方法就是对每个控件分别设置frame,不过这样一来工作量大,而且适配能力非常差,不同的iOS版本,不同的屏幕尺寸会出现错位问题
下面介绍一种行之有效的方法,以最少的代码解决最复杂的问题,核心技术在于控件编号,计算 取余 操作
如:现在10个按钮,需要排成2排,这些都是有规律的第一步:分别设置按钮的tag值1-10;
第二步:创建一个For循环,遍历10个按钮;
第三步:用tag对2取余,取余等于0排右边,取余等于1排左边,取余值乘以半个屏幕宽度,即可得到各控件的x值;
第四步:(tag - 1)/ 2即可得到每个按钮的行号,如果是3列则除3,在此基础上再乘以各控件高度,即可得到y值;
第五步:再复杂一点,如果各列按钮高度不一至,可通过取余得到各按钮列号,再通过除法运算得到行号,可自动设置各高度;
第N步:自由组合吧,得到各种想要的效果

3、代码示例
    for (UIButton *button in _baseView.subviews) {
                                                CGSize viewSize = _baseView.frame.size;                                 // 设置基础尺寸
                                                NSInteger index = button.tag / 10;
                                                CGFloat x = ((index + 1) % 2) * (viewSize.width / 2 + 1);               // 左排靠边,右排中线右移1
                                                CGFloat y = (index - 1) / 2 * viewSize.height / (index % 2 + 4) + 2;    // 左排5等分,右排4等分排序
                                                CGFloat width = viewSize.width * 0.5 - 1;                               // 半屏宽度减1px以预留间隙
                                                CGFloat height =viewSize.height / ((index % 2) + 4) - 2;                // 左排5等分,右排4等分视图
                                                button.frame = CGRectMake(x, y, width, height);                         // 计算上述坐标、宽高自动排列
}

效果为左排5个按钮,右排4个按钮,各按钮中留有空隙;

4、进阶操作
控件可能还需要设置其他属性,比如背景图片,再提供一个科学有效的方法
对各图片规范命名,如image_1.png、image_2.png、……、image_n.png
明白了吧,在循环中利用i值,或tag值,将图片与控件对应起来,一起搞定!

页: [1]
查看完整版本: 同时创建多个按钮时实现自动排列