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 = btn.imageEdgeInsets = UIEdgeInsetsMake(-lblH-margin/, , , -lblW)
btn.titleEdgeInsets = UIEdgeInsetsMake(imgH+margin/, -imgW, , ) }

总结来说,就是:

图片 向  右上角   移动

文字 向  左下角   移动

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

iOS UIButton 图片文字左右互移 位置对调 解决方案

iOS UIButton 图片文字上下垂直布局 解决方案的更多相关文章

  1. iOS UIButton 图片文字左右互移 位置对调 解决方案

    实现类似效果: 代码实现: btnGrade.titleEdgeInsets = UIEdgeInsetsMake(, -(btnGrade.imageView?.bounds.width)!, , ...

  2. UIButton图片文字控件位置自定义(图片居右文字居左、图片居中文字居中、图片居左文字消失等)

    在开发中经常会碰到需要对按钮中的图片文字位置做调整的需求.第一种方式是通过设置按钮中图片文字的偏移量.通过方法setTitleEdgeInsets和setImageEdgeInsets实现 代码如下: ...

  3. iOS·UIButton如何文字在下图片在上

    创建子类继承自UIButton,在layoutSubviews方法中改变文字和图片的位置就可以了,同理,稍作改变,可以写出文字在上图片在下.本文只给出文字在下图片在上的代码 -(void)layout ...

  4. UIButton 图片文字位置

    在实际开发过程中经常在按钮上添加文字和图片,位置和图片的位置根据需求放置也是不一样的.下面实现了各种显示方式,如下图: UIButton+LSAdditions.h // // UIButton+LS ...

  5. UIButton图片文字位置的四种情况

    我们在做项目的过程中经常会遇到各定制UIButton 1.左边图片,右边文字 2.左边文字,右边图片 3.上边图片,下边文字 4.上边文字,下边图片 针对这四种情况 使用UIButton的catego ...

  6. iOS - UIButton设置文字标题下划线以及下划线颜色

    创建button设置可以折行显示 - (void)viewDidLoad { [super viewDidLoad]; UIButton * button = [[UIButton alloc] in ...

  7. day08—css布局解决方案之多列布局

    转行学开发,代码100天——2018-03-24 本文将记录CSS布局之垂直布局解决方案. 常见的多列布局包括以下: 1.定宽+自适应 2.两列定宽+一列自适应 3.不定宽+自适应 4.两列不定宽+一 ...

  8. iOS UIButton文字和图片间距随意调整

    代码地址如下:http://www.demodashi.com/demo/11606.html 前记 在开发中,我们经常会遇到这么一种情况,就是一个按钮上面有图片也有文字,但是往往设计并不是我们想要的 ...

  9. CSS 实现:图片+文字的布局(综合)

    ☊[实现要求]:图片+文字+居中 √[实现]: ① img + 文字 <div class="demo2-1"> <img src="" al ...

随机推荐

  1. 两个与spring事务相关的问题

    有些spring相关的知识点之前一直没有仔细研究:比如spring的事务,并不是没有使用,也曾经简单的在某些需要事务处理的方法上通过增加事务注解来实现事务功能,仅仅是跟随使用(甚至并未测试过事务的正确 ...

  2. IO复用_epoll函数

    由于poll()和select()的局限,2.6内核以上引用了event poll机制(就是说的epoll),虽然比前2个实现复杂得多,epoll解决了它们共有的基本性能问题,并增加了新的特性. po ...

  3. Lua-面向对象中函数使用时冒号(:)和点(.)的区别

    先来看一段简单的代码: local Animal = {} function Animal:Eat( food ) print("Animal:Eat", self, food) ...

  4. Echo.js – 简单易用的 JavaScript 图片延迟加载插件

    Echo.js 是一个独立的延迟加载图片的 JavaScript 插件.Echo.js 不依赖第三方库,压缩后不到1KB大小. 延迟加载是提高网页首屏显示速度的一种很有效的方法,当图片元素进入窗口可视 ...

  5. Java2_J2EE体系架构

    J2EE是Java2平台企业版(Java 2 Platform,Enterprise Edition),它的核心是一组技术规范与指南,提供基于组件的方式来设计.开发.组装和部署企业应用.J2EE使用多 ...

  6. 微信+angularJS的SPA应用中用router进行页面跳转,jssdk校验失败问题解决

    今天偶然的把微信jssdk的debug打开后,发现调试信息总是提示签名错误,感情前两天api的"偶尔"不生效,不是因为还没执行代码,而是因为签名没正确啊!,这就是个100%可以重现 ...

  7. canvas画布在主流浏览器中的尺寸限制

    通过测试发现,canvas在不同浏览器下面有不同的最大尺寸限制. 大家都知道,canvas有自身的width,height属性来控制尺寸,用css的width,height,控制显示的大小.可以理解为 ...

  8. ae专题图

    点密度图.分层设色图/等级图.单值图.柱状图.饼状图的实现代码 C# private void 点密度图ToolStripMenuItem_Click(object sender, EventArgs ...

  9. 为什么你找不到优秀的GISer?

    每年的三四月是招聘的黄金时节,故有金三银四的说法.求贤纳才对于处在发展上升期的公司来说,是全年性的常态化工作.只是这俩月市场上求职者数量较别的月份多.基数大了,淘到金子的概率自然会增加.大部分公司的伯 ...

  10. [javascript svg fill stroke stroke-width x1 y1 x2 y2 line stroke-opacity fill-opacity 属性讲解] svg fill stroke stroke-width stroke-opacity fill-opacity line绘制线条属性讲解

    <!DOCTYPE html> <html lang='zh-cn'> <head> <title>Insert you title</title ...