1. 喜欢交朋友的加:微信号 dwjluck2013

1.UIButton+ImageTitleSpace.h

  1. #import <UIKit/UIKit.h>
  2.  
  3. // 定义一个枚举(包含了四种类型的button)
  4. typedef NS_ENUM(NSUInteger, MKButtonEdgeInsetsStyle) {
  5. MKButtonEdgeInsetsStyleTop, // image在上,label在下
  6. MKButtonEdgeInsetsStyleLeft, // image在左,label在右
  7. MKButtonEdgeInsetsStyleBottom, // image在下,label在上
  8. MKButtonEdgeInsetsStyleRight // image在右,label在左
  9. };
  10.  
  11. @interface UIButton (ImageTitleSpace)
  12.  
  13. /**
  14. * 设置button的titleLabel和imageView的布局样式,及间距
  15. *
  16. * @param style titleLabel和imageView的布局样式
  17. * @param space titleLabel和imageView的间距
  18. */
  19. - (void)layoutButtonWithEdgeInsetsStyle:(MKButtonEdgeInsetsStyle)style
  20. imageTitleSpace:(CGFloat)space;
  21.  
  22. @end

2.UIButton+ImageTitleSpace.m

  1. #import "UIButton+ImageTitleSpace.h"
  2.  
  3. @implementation UIButton (ImageTitleSpace)
  4.  
  5. - (void)layoutButtonWithEdgeInsetsStyle:(MKButtonEdgeInsetsStyle)style
  6. imageTitleSpace:(CGFloat)space {
  7. /**
  8. * 知识点:titleEdgeInsets是title相对于其上下左右的inset,跟tableView的contentInset是类似的,
  9. * 如果只有title,那它上下左右都是相对于button的,image也是一样;
  10. * 如果同时有image和label,那这时候image的上左下是相对于button,右边是相对于label的;title的上右下是相对于button,左边是相对于image的。
  11. */
  12.  
  13. // 1. 得到imageView和titleLabel的宽、高
  14. CGFloat imageWith = self.imageView.frame.size.width;
  15. CGFloat imageHeight = self.imageView.frame.size.height;
  16.  
  17. CGFloat labelWidth = 0.0;
  18. CGFloat labelHeight = 0.0;
  19. if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0) {
  20. // 由于iOS8中titleLabel的size为0,用下面的这种设置
  21. labelWidth = self.titleLabel.intrinsicContentSize.width;
  22. labelHeight = self.titleLabel.intrinsicContentSize.height;
  23. } else {
  24. labelWidth = self.titleLabel.frame.size.width;
  25. labelHeight = self.titleLabel.frame.size.height;
  26. }
  27.  
  28. // 2. 声明全局的imageEdgeInsets和labelEdgeInsets
  29. UIEdgeInsets imageEdgeInsets = UIEdgeInsetsZero;
  30. UIEdgeInsets labelEdgeInsets = UIEdgeInsetsZero;
  31.  
  32. // 3. 根据style和space得到imageEdgeInsets和labelEdgeInsets的值
  33. /**
  34. MKButtonEdgeInsetsStyleTop, // image在上,label在下
  35. MKButtonEdgeInsetsStyleLeft, // image在左,label在右
  36. MKButtonEdgeInsetsStyleBottom, // image在下,label在上
  37. MKButtonEdgeInsetsStyleRight // image在右,label在左
  38. */
  39. switch (style) {
  40. case MKButtonEdgeInsetsStyleTop:
  41. {
  42. imageEdgeInsets = UIEdgeInsetsMake(-labelHeight-space/2.0, , , -labelWidth);
  43. labelEdgeInsets = UIEdgeInsetsMake(, -imageWith, -imageHeight-space/2.0, );
  44. }
  45. break;
  46. case MKButtonEdgeInsetsStyleLeft:
  47. {
  48. imageEdgeInsets = UIEdgeInsetsMake(, -space/2.0, , space/2.0);
  49. labelEdgeInsets = UIEdgeInsetsMake(, space/2.0, , -space/2.0);
  50. }
  51. break;
  52. case MKButtonEdgeInsetsStyleBottom:
  53. {
  54. imageEdgeInsets = UIEdgeInsetsMake(, , -labelHeight-space/2.0, -labelWidth);
  55. labelEdgeInsets = UIEdgeInsetsMake(-imageHeight-space/2.0, -imageWith, , );
  56. }
  57. break;
  58. case MKButtonEdgeInsetsStyleRight:
  59. {
  60. imageEdgeInsets = UIEdgeInsetsMake(, labelWidth+space/2.0, , -labelWidth-space/2.0);
  61. labelEdgeInsets = UIEdgeInsetsMake(, -imageWith-space/2.0, , imageWith+space/2.0);
  62. }
  63. break;
  64. default:
  65. break;
  66. }
  67.  
  68. // 4. 赋值
  69. self.titleEdgeInsets = labelEdgeInsets;
  70. self.imageEdgeInsets = imageEdgeInsets;
  71. }
  72.  
  73. @end

3.使用

1.导入头文件

  1. #import "UIButton+ImageTitleSpace.h"

2.在懒加载 按钮中调用

  1. // 图片标题
  2. - (UIButton *)imageTitleButton
  3. {
  4. if (!_imageTitleButton) {
  5. _imageTitleButton = [[UIButton alloc]initWithFrame:CGRectZero];
  6. _imageTitleButton.backgroundColor = [UIColor blackColor];
  7. [_imageTitleButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
  8. [_imageTitleButton setImage:[UIImage imageNamed:@"nv"] forState:UIControlStateNormal];
  9. _imageTitleButton.titleLabel.font = [UIFont systemFontOfSize:ImageTitleButtonFontSize];
  10. //懒加载按钮中 调用即可
  11. [_imageTitleButton layoutButtonWithEdgeInsetsStyle:MKButtonEdgeInsetsStyleLeft imageTitleSpace:];
  12.  
  13. [_imageTitleButton setContentEdgeInsets:UIEdgeInsetsMake(, , , )];
  14. _imageTitleButton.clipsToBounds = YES;
  15. _imageTitleButton.layer.cornerRadius = ;
  16. _imageTitleButton.alpha = 0.5;
  17.  
  18. }
  19. return _imageTitleButton;
  20. }

自定义UIButton 实现图片和文字 之间距离和不同样式的更多相关文章

  1. UIButton的图片和文字相对位置调整

    通常.假设直接设置UIButton的图片和文字,默认的两者相对位置可能不是我们想要的,那么须要进行调整. 须要用到的函数例如以下: UIEdgeInsetsMake(CGFloat top, CGFl ...

  2. 更改控件中DrawableLeft图片的大小,图片与文字的距离

    Drawable drawable=getResources().getDrawable(R.drawable.xx); //获取图片 drawable.setBounds(left, top, ri ...

  3. UIButton上图片和文字的位置调整

    UIButton 上默认是图片在左文字在右,而大多数情况这样默认的的显示形式都不能满足我们的需求,接下来我就这个问题分享一下我的心得. 默认情况下,不设置的效果,都是居中实现 UIButton *bu ...

  4. Android 自定义Android带图片和文字的ImageButton

    经过分析,上述按钮效果实际上就是一个布局,一个最简单不过的垂直线性布局,上部分是一个ImageView,下部分是一个TextView,这个布局可点击.可设置监听. 我们首先要编写自己的ImageBut ...

  5. iOS开发小技巧--修改按钮内部图片和文字之间的间距(xib)

    调整按钮的Edge属性,选择调整图片的Edge还是label的Edge,如图:

  6. UIButton左边图片右边文字的做法

    UIImage *yuyinImage = [UIImage imageNamed:@"yuyin.png"]; [soundButton setImage:yuyinImage ...

  7. UIButton和UINavigationItem设置图片和文字位置

    1.UIButton设置文字位置 有些时候我们想让UIButton的title居左对齐,我们设置 btn.textLabel.textAlignment = UITextAlignmentLeft 是 ...

  8. Android 巧妙实现图片和文字布局

    之前写过一个博客是关于实现图片和文字左右或者上下布局的方法, 下面是博客的主要内容: 布局文件很简单,用来展示RadioButton的使用方法. 1 <?xml version="1. ...

  9. android TextView 例子代码(文字图片、文字省略、文字滚动)

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

随机推荐

  1. (转)Android--UI之ImageView

    前言 这篇博客聊一聊在Android下ImageView的使用,在此篇博客中,会讲解到ImageView的一些属性的使用,以及ImageView展示图片的放大.缩小.旋转等操作.最后再讲解一下Andr ...

  2. cookie VS sessionstorge VS localstorge

    虽然cookie , localstorge , sessionstorge三者都有存储的功能,但是还是有区别, git上地址:https://github.com/lily1010/cookie-s ...

  3. margin在块元素、内联元素中的区别 padding

    (1)margin在块元素.内联元素中的区别 HTML(这里说的是html标准,而不是xhtml)里分两种基本元素,即block和inline.顾名思义,block元素就是以”块”表现的元素(bloc ...

  4. CodeForces - 450B Jzzhu and Sequences —— 斐波那契数、矩阵快速幂

    题目链接:https://vjudge.net/problem/CodeForces-450B B. Jzzhu and Sequences time limit per test 1 second ...

  5. 如何使用Psyco为你的Python程序提速

    psyco加速Python执行速度的方法:要求: 版本对照:File name      Python versions      Well-tested withpsyco-x.y-win32-py ...

  6. oracle 10g 静默安装(无图形化)

    Oracle 10g无图形界面安装 此文档是在oracle环境变量已经配置完成,不缺少依赖包的情况下进行安装: 解压oracle的安装包, 首先vi database/response/enterpr ...

  7. shell json简单处理

  8. Hadoop2 使用 YARN 运行 MapReduce 的过程源码分析

    Hadoop 使用 YARN 运行 MapReduce 的过程如下图所示: 总共分为11步. 这里以 WordCount 为例, 我们在客户端终端提交作业: # 把本地的 /home/hadoop/t ...

  9. ubuntu系统下挂载新的硬盘

    参考 http://zwkufo.blog.163.com/blog/static/258825120141283942244/     http://blog.csdn.net/caicai2526 ...

  10. Httpclient: 多层翻页网络爬虫实战(以搜房网为例)

    参考:http://blog.csdn.net/qy20115549/article/details/52912532 一.创建数据表 #创建表:用来存储url地址信息 create table so ...