TA的每日心情 | 汗 2024-10-15 10:05 |
---|
签到天数: 372 天 [LV.9]以坛为家II
|
本帖最后由 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值,将图片与控件对应起来,一起搞定!
|
|