博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS UIButton 图片文字上下垂直布局 解决方案
阅读量:4477 次
发布时间:2019-06-08

本文共 1483 字,大约阅读时间需要 4 分钟。

1、实现效果:

 

这是一个UIButton,需要改变image和title相对位置。

 

2、实现原理:

利用UIEdgeInsetsMake:里面的四个参数表示距离上边界、左边界、下边界、右边界的距离,默认都为零

 

 

 

此时,4个边距都有一个初始值,我们设置UIEdgeInsetsMake(0,0,0,0),位置是不动的

当我们给top一个正1的位移:UIEdgeInsetsMake(1,0,0,0),此时btn内的image是向下移动了0.5。

注意:为什么是0.5,这是因为我们没有设置button的内部控件对齐方式,位移距离此时变成了一半。

比如:btn.contentHorizontalAlignment和contentVerticalAlignment

只有当我们设置了这两个属性,位移才会和设置位移值相等。

 

我们记住一个原则,当设置正值,就表示内边距变大,负值则表示减少内边距

 

3、实现如下:

定义按钮

btnFlash = UIButton(frame: frame)        btnFlash.setImage(UIImage(named: "flash_off"), for: .normal)        btnFlash.setTitle("手电筒", for: .normal)        self.view.addSubview(btnFlash)        setButtonMiddle(btn: btnFlash)

方法调用

/// 设置按钮图片文字上下垂直居中    /// 前提:1、必须设置好按钮的图片和文字    ///      2、按钮frame能让图片和文字正常显示出来(别btn宽度太小,文字都省略号了)    ///    /// - Parameter btn: <#btn description#>    func setButtonMiddle(btn:UIButton) {        if btn.imageView == nil || btn.titleLabel == nil{            return        }                let imgW:CGFloat = btn.imageView!.frame.size.width        let imgH:CGFloat = btn.imageView!.frame.size.height        let lblW:CGFloat = btn.titleLabel!.frame.size.width        let lblH:CGFloat = btn.titleLabel!.frame.size.height        //设置图片和文字的间距,这里可自行调整        let margin:CGFloat = 5        btn.imageEdgeInsets = UIEdgeInsetsMake(-lblH-margin/2, 0, 0, -lblW)        btn.titleEdgeInsets = UIEdgeInsetsMake(imgH+margin/2, -imgW, 0, 0)                    }

 

总结来说,就是:

图片 向  右上角   移动

文字 向  左下角   移动

 

 

PS:如果图片文字左右平移,参考这个

 

转载于:https://www.cnblogs.com/yajunLi/p/5949359.html

你可能感兴趣的文章
范围(地址转换)
查看>>
Unity3D游戏,TCP,WEBCOSKT,HTTP通信架构 weaving-socket
查看>>
【小程序入门集锦】19,微信小程序个人帐号申请
查看>>
php写一个简单的计算器
查看>>
【JAVA零基础入门系列】Day3 Java基本数据类型
查看>>
两个整数,求他们的最小公倍数和最大公约数
查看>>
Mongo索引
查看>>
php 实现设计模式之 建造者模式
查看>>
An Easy C Program Problem
查看>>
Replace Nested Conditional with Guard Clauses(用卫语句代替嵌套循环)
查看>>
jsp中${}是EL表达式的常规表示方式
查看>>
GoldenGate常见问题及处理
查看>>
Android JNI学习(五)——Demo演示
查看>>
SSRS 呈现Barcode Free
查看>>
java快速排序引起的StackOverflowError异常
查看>>
泛函编程(35)-泛函Stream IO:IO处理过程-IO Process
查看>>
-XX:-PrintClassHistogram 按下Ctrl+Break后,打印类的信息
查看>>
mac 安装php redis扩展
查看>>
css3中Animation
查看>>
JS 判断是否是手机端并跳转操作
查看>>