年年有"余"

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3120|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    2022-12-13 21:26
  • 签到天数: 371 天

    [LV.9]以坛为家II

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

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

    4、进阶操作
    控件可能还需要设置其他属性,比如背景图片,再提供一个科学有效的方法
    对各图片规范命名,如image_1.png、image_2.png、……、image_n.png
    明白了吧,在循环中利用i值,或tag值,将图片与控件对应起来,一起搞定!
    iOS 模拟器屏幕快照“2014年8月9日 下午10.37.53”.png
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    手机版|小黑屋|Archiver|iOS开发笔记 ( 湘ICP备14010846号 )

    GMT+8, 2024-5-1 08:26 , Processed in 0.047200 second(s), 22 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表