自定义UIButton 实现图片和文字 之间距离和不同样式
- 喜欢交朋友的加:微信号 dwjluck2013
1.UIButton+ImageTitleSpace.h
- #import <UIKit/UIKit.h>
- // 定义一个枚举(包含了四种类型的button)
- typedef NS_ENUM(NSUInteger, MKButtonEdgeInsetsStyle) {
- MKButtonEdgeInsetsStyleTop, // image在上,label在下
- MKButtonEdgeInsetsStyleLeft, // image在左,label在右
- MKButtonEdgeInsetsStyleBottom, // image在下,label在上
- MKButtonEdgeInsetsStyleRight // image在右,label在左
- };
- @interface UIButton (ImageTitleSpace)
- /**
- * 设置button的titleLabel和imageView的布局样式,及间距
- *
- * @param style titleLabel和imageView的布局样式
- * @param space titleLabel和imageView的间距
- */
- - (void)layoutButtonWithEdgeInsetsStyle:(MKButtonEdgeInsetsStyle)style
- imageTitleSpace:(CGFloat)space;
- @end
2.UIButton+ImageTitleSpace.m
- #import "UIButton+ImageTitleSpace.h"
- @implementation UIButton (ImageTitleSpace)
- - (void)layoutButtonWithEdgeInsetsStyle:(MKButtonEdgeInsetsStyle)style
- imageTitleSpace:(CGFloat)space {
- /**
- * 知识点:titleEdgeInsets是title相对于其上下左右的inset,跟tableView的contentInset是类似的,
- * 如果只有title,那它上下左右都是相对于button的,image也是一样;
- * 如果同时有image和label,那这时候image的上左下是相对于button,右边是相对于label的;title的上右下是相对于button,左边是相对于image的。
- */
- // 1. 得到imageView和titleLabel的宽、高
- CGFloat imageWith = self.imageView.frame.size.width;
- CGFloat imageHeight = self.imageView.frame.size.height;
- CGFloat labelWidth = 0.0;
- CGFloat labelHeight = 0.0;
- if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0) {
- // 由于iOS8中titleLabel的size为0,用下面的这种设置
- labelWidth = self.titleLabel.intrinsicContentSize.width;
- labelHeight = self.titleLabel.intrinsicContentSize.height;
- } else {
- labelWidth = self.titleLabel.frame.size.width;
- labelHeight = self.titleLabel.frame.size.height;
- }
- // 2. 声明全局的imageEdgeInsets和labelEdgeInsets
- UIEdgeInsets imageEdgeInsets = UIEdgeInsetsZero;
- UIEdgeInsets labelEdgeInsets = UIEdgeInsetsZero;
- // 3. 根据style和space得到imageEdgeInsets和labelEdgeInsets的值
- /**
- MKButtonEdgeInsetsStyleTop, // image在上,label在下
- MKButtonEdgeInsetsStyleLeft, // image在左,label在右
- MKButtonEdgeInsetsStyleBottom, // image在下,label在上
- MKButtonEdgeInsetsStyleRight // image在右,label在左
- */
- switch (style) {
- case MKButtonEdgeInsetsStyleTop:
- {
- imageEdgeInsets = UIEdgeInsetsMake(-labelHeight-space/2.0, , , -labelWidth);
- labelEdgeInsets = UIEdgeInsetsMake(, -imageWith, -imageHeight-space/2.0, );
- }
- break;
- case MKButtonEdgeInsetsStyleLeft:
- {
- imageEdgeInsets = UIEdgeInsetsMake(, -space/2.0, , space/2.0);
- labelEdgeInsets = UIEdgeInsetsMake(, space/2.0, , -space/2.0);
- }
- break;
- case MKButtonEdgeInsetsStyleBottom:
- {
- imageEdgeInsets = UIEdgeInsetsMake(, , -labelHeight-space/2.0, -labelWidth);
- labelEdgeInsets = UIEdgeInsetsMake(-imageHeight-space/2.0, -imageWith, , );
- }
- break;
- case MKButtonEdgeInsetsStyleRight:
- {
- imageEdgeInsets = UIEdgeInsetsMake(, labelWidth+space/2.0, , -labelWidth-space/2.0);
- labelEdgeInsets = UIEdgeInsetsMake(, -imageWith-space/2.0, , imageWith+space/2.0);
- }
- break;
- default:
- break;
- }
- // 4. 赋值
- self.titleEdgeInsets = labelEdgeInsets;
- self.imageEdgeInsets = imageEdgeInsets;
- }
- @end
3.使用
1.导入头文件
- #import "UIButton+ImageTitleSpace.h"
2.在懒加载 按钮中调用
- // 图片标题
- - (UIButton *)imageTitleButton
- {
- if (!_imageTitleButton) {
- _imageTitleButton = [[UIButton alloc]initWithFrame:CGRectZero];
- _imageTitleButton.backgroundColor = [UIColor blackColor];
- [_imageTitleButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
- [_imageTitleButton setImage:[UIImage imageNamed:@"nv"] forState:UIControlStateNormal];
- _imageTitleButton.titleLabel.font = [UIFont systemFontOfSize:ImageTitleButtonFontSize];
- //懒加载按钮中 调用即可
- [_imageTitleButton layoutButtonWithEdgeInsetsStyle:MKButtonEdgeInsetsStyleLeft imageTitleSpace:];
- [_imageTitleButton setContentEdgeInsets:UIEdgeInsetsMake(, , , )];
- _imageTitleButton.clipsToBounds = YES;
- _imageTitleButton.layer.cornerRadius = ;
- _imageTitleButton.alpha = 0.5;
- }
- return _imageTitleButton;
- }
自定义UIButton 实现图片和文字 之间距离和不同样式的更多相关文章
- UIButton的图片和文字相对位置调整
通常.假设直接设置UIButton的图片和文字,默认的两者相对位置可能不是我们想要的,那么须要进行调整. 须要用到的函数例如以下: UIEdgeInsetsMake(CGFloat top, CGFl ...
- 更改控件中DrawableLeft图片的大小,图片与文字的距离
Drawable drawable=getResources().getDrawable(R.drawable.xx); //获取图片 drawable.setBounds(left, top, ri ...
- UIButton上图片和文字的位置调整
UIButton 上默认是图片在左文字在右,而大多数情况这样默认的的显示形式都不能满足我们的需求,接下来我就这个问题分享一下我的心得. 默认情况下,不设置的效果,都是居中实现 UIButton *bu ...
- Android 自定义Android带图片和文字的ImageButton
经过分析,上述按钮效果实际上就是一个布局,一个最简单不过的垂直线性布局,上部分是一个ImageView,下部分是一个TextView,这个布局可点击.可设置监听. 我们首先要编写自己的ImageBut ...
- iOS开发小技巧--修改按钮内部图片和文字之间的间距(xib)
调整按钮的Edge属性,选择调整图片的Edge还是label的Edge,如图:
- UIButton左边图片右边文字的做法
UIImage *yuyinImage = [UIImage imageNamed:@"yuyin.png"]; [soundButton setImage:yuyinImage ...
- UIButton和UINavigationItem设置图片和文字位置
1.UIButton设置文字位置 有些时候我们想让UIButton的title居左对齐,我们设置 btn.textLabel.textAlignment = UITextAlignmentLeft 是 ...
- Android 巧妙实现图片和文字布局
之前写过一个博客是关于实现图片和文字左右或者上下布局的方法, 下面是博客的主要内容: 布局文件很简单,用来展示RadioButton的使用方法. 1 <?xml version="1. ...
- android TextView 例子代码(文字图片、文字省略、文字滚动)
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
随机推荐
- (转)Android--UI之ImageView
前言 这篇博客聊一聊在Android下ImageView的使用,在此篇博客中,会讲解到ImageView的一些属性的使用,以及ImageView展示图片的放大.缩小.旋转等操作.最后再讲解一下Andr ...
- cookie VS sessionstorge VS localstorge
虽然cookie , localstorge , sessionstorge三者都有存储的功能,但是还是有区别, git上地址:https://github.com/lily1010/cookie-s ...
- margin在块元素、内联元素中的区别 padding
(1)margin在块元素.内联元素中的区别 HTML(这里说的是html标准,而不是xhtml)里分两种基本元素,即block和inline.顾名思义,block元素就是以”块”表现的元素(bloc ...
- CodeForces - 450B Jzzhu and Sequences —— 斐波那契数、矩阵快速幂
题目链接:https://vjudge.net/problem/CodeForces-450B B. Jzzhu and Sequences time limit per test 1 second ...
- 如何使用Psyco为你的Python程序提速
psyco加速Python执行速度的方法:要求: 版本对照:File name Python versions Well-tested withpsyco-x.y-win32-py ...
- oracle 10g 静默安装(无图形化)
Oracle 10g无图形界面安装 此文档是在oracle环境变量已经配置完成,不缺少依赖包的情况下进行安装: 解压oracle的安装包, 首先vi database/response/enterpr ...
- shell json简单处理
- Hadoop2 使用 YARN 运行 MapReduce 的过程源码分析
Hadoop 使用 YARN 运行 MapReduce 的过程如下图所示: 总共分为11步. 这里以 WordCount 为例, 我们在客户端终端提交作业: # 把本地的 /home/hadoop/t ...
- ubuntu系统下挂载新的硬盘
参考 http://zwkufo.blog.163.com/blog/static/258825120141283942244/ http://blog.csdn.net/caicai2526 ...
- Httpclient: 多层翻页网络爬虫实战(以搜房网为例)
参考:http://blog.csdn.net/qy20115549/article/details/52912532 一.创建数据表 #创建表:用来存储url地址信息 create table so ...