自定义UIButton,文字图片位置设置 例:图片在上文字在下
2016-11-25 15:18
288 查看
#import
<UIKit/UIKit.h>
typedef
NS_ENUM(NSUInteger, JKButtonEdgeInsetsStyle) {
JKButtonEdgeInsetsStyleTop,
// image在上,label在下
JKButtonEdgeInsetsStyleLeft,
// image在左,label在右
JKButtonEdgeInsetsStyleBottom,
// image在下,label在上
JKButtonEdgeInsetsStyleRight
// image在右,label在左
};
@interface UIButton (JKImageTitleSpacing)
+ (UIButton *)buttonWithTitle:(NSString
*)title ImageName:(NSString *)imageName ButtonEdgeInsetsStyle:(JKButtonEdgeInsetsStyle)edgeInsetsStyle
Frame:(CGRect)frame actionBlock:(void(^)(UIButton
*sender))actionBlock;
@end
#import
"UIButton+JKImageTitleSpacing.h"
typedef
void (^ActionBlock)(UIButton *);
@implementation UIButton (JKImageTitleSpacing)
static
ActionBlock _actionBlock;
+ (UIButton *)buttonWithTitle:(NSString
*)title
ImageName:(NSString *)imageName
ButtonEdgeInsetsStyle:(JKButtonEdgeInsetsStyle)edgeInsetsStyle
Frame:(CGRect)frame
actionBlock:(void(^)(UIButton
*sender))actionBlock {
UIButton *button = [[UIButton
alloc]
init];
[button
setTitle:title
forState:UIControlStateNormal];
[button
setImage:[UIImage
imageNamed:imageName]
forState:UIControlStateNormal];
_actionBlock = actionBlock;
button.frame = frame;
[button
addTarget:self
action:@selector(buttonClickAction:)
forControlEvents:UIControlEventTouchUpInside];
[button
layoutButtonWithEdgeInsetsStyle:edgeInsetsStyle
imageTitleSpace:10];
return button;
}
+ (void)buttonClickAction:(UIButton
*)sender {
if (_actionBlock) {
_actionBlock(sender);
}
}
- (void)layoutButtonWithEdgeInsetsStyle:(JKButtonEdgeInsetsStyle)style
imageTitleSpace:(CGFloat)space
{
// self.backgroundColor = [UIColor cyanColor];
/**
* 前置知识点: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的值
switch (style) {
case
JKButtonEdgeInsetsStyleTop:
{
imageEdgeInsets =
UIEdgeInsetsMake(-labelHeight-space/2.0,
0,
0, -labelWidth);
labelEdgeInsets =
UIEdgeInsetsMake(0, -imageWith, -imageHeight-space/2.0,
0);
}
break;
case
JKButtonEdgeInsetsStyleLeft:
{
imageEdgeInsets =
UIEdgeInsetsMake(0, -space/2.0,
0, space/2.0);
labelEdgeInsets =
UIEdgeInsetsMake(0, space/2.0,
0, -space/2.0);
}
break;
case
JKButtonEdgeInsetsStyleBottom:
{
imageEdgeInsets =
UIEdgeInsetsMake(0,
0, -labelHeight-space/2.0, -labelWidth);
labelEdgeInsets =
UIEdgeInsetsMake(-imageHeight-space/2.0, -imageWith,
0,
0);
}
break;
case
JKButtonEdgeInsetsStyleRight:
{
imageEdgeInsets =
UIEdgeInsetsMake(0, labelWidth+space/2.0,
0, -labelWidth-space/2.0);
labelEdgeInsets =
UIEdgeInsetsMake(0, -imageWith-space/2.0,
0, imageWith+space/2.0);
}
break;
default:
break;
}
// 4. 赋值
self.titleEdgeInsets
= labelEdgeInsets;
self.imageEdgeInsets
= imageEdgeInsets;
}
@end
<UIKit/UIKit.h>
typedef
NS_ENUM(NSUInteger, JKButtonEdgeInsetsStyle) {
JKButtonEdgeInsetsStyleTop,
// image在上,label在下
JKButtonEdgeInsetsStyleLeft,
// image在左,label在右
JKButtonEdgeInsetsStyleBottom,
// image在下,label在上
JKButtonEdgeInsetsStyleRight
// image在右,label在左
};
@interface UIButton (JKImageTitleSpacing)
+ (UIButton *)buttonWithTitle:(NSString
*)title ImageName:(NSString *)imageName ButtonEdgeInsetsStyle:(JKButtonEdgeInsetsStyle)edgeInsetsStyle
Frame:(CGRect)frame actionBlock:(void(^)(UIButton
*sender))actionBlock;
@end
#import
"UIButton+JKImageTitleSpacing.h"
typedef
void (^ActionBlock)(UIButton *);
@implementation UIButton (JKImageTitleSpacing)
static
ActionBlock _actionBlock;
+ (UIButton *)buttonWithTitle:(NSString
*)title
ImageName:(NSString *)imageName
ButtonEdgeInsetsStyle:(JKButtonEdgeInsetsStyle)edgeInsetsStyle
Frame:(CGRect)frame
actionBlock:(void(^)(UIButton
*sender))actionBlock {
UIButton *button = [[UIButton
alloc]
init];
[button
setTitle:title
forState:UIControlStateNormal];
[button
setImage:[UIImage
imageNamed:imageName]
forState:UIControlStateNormal];
_actionBlock = actionBlock;
button.frame = frame;
[button
addTarget:self
action:@selector(buttonClickAction:)
forControlEvents:UIControlEventTouchUpInside];
[button
layoutButtonWithEdgeInsetsStyle:edgeInsetsStyle
imageTitleSpace:10];
return button;
}
+ (void)buttonClickAction:(UIButton
*)sender {
if (_actionBlock) {
_actionBlock(sender);
}
}
- (void)layoutButtonWithEdgeInsetsStyle:(JKButtonEdgeInsetsStyle)style
imageTitleSpace:(CGFloat)space
{
// self.backgroundColor = [UIColor cyanColor];
/**
* 前置知识点: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的值
switch (style) {
case
JKButtonEdgeInsetsStyleTop:
{
imageEdgeInsets =
UIEdgeInsetsMake(-labelHeight-space/2.0,
0,
0, -labelWidth);
labelEdgeInsets =
UIEdgeInsetsMake(0, -imageWith, -imageHeight-space/2.0,
0);
}
break;
case
JKButtonEdgeInsetsStyleLeft:
{
imageEdgeInsets =
UIEdgeInsetsMake(0, -space/2.0,
0, space/2.0);
labelEdgeInsets =
UIEdgeInsetsMake(0, space/2.0,
0, -space/2.0);
}
break;
case
JKButtonEdgeInsetsStyleBottom:
{
imageEdgeInsets =
UIEdgeInsetsMake(0,
0, -labelHeight-space/2.0, -labelWidth);
labelEdgeInsets =
UIEdgeInsetsMake(-imageHeight-space/2.0, -imageWith,
0,
0);
}
break;
case
JKButtonEdgeInsetsStyleRight:
{
imageEdgeInsets =
UIEdgeInsetsMake(0, labelWidth+space/2.0,
0, -labelWidth-space/2.0);
labelEdgeInsets =
UIEdgeInsetsMake(0, -imageWith-space/2.0,
0, imageWith+space/2.0);
}
break;
default:
break;
}
// 4. 赋值
self.titleEdgeInsets
= labelEdgeInsets;
self.imageEdgeInsets
= imageEdgeInsets;
}
@end
相关文章推荐
- UIButton设置文字和图片的位置EdgeInsets
- 自定义UIButton上的文字和图片位置
- UIEdgeInsetsMake设置UIButton的图片、文字的相对位置
- UIButton的UIEdgeInsets功能:设置button上的文字和图片的位置
- iOS - UIButton(UIEdgeInsets)/设置button上的文字和图片 在定义位置
- UIButton和UINavigationItem设置图片和文字位置
- 设置UIButton图片和文字的位置(下上文图, 上图下文, 左图右文, 左文右图)
- iOS - UIButton(UIEdgeInsets)/设置button上的文字和图片 在定义位置
- 代码设置UIButton文字、图片位置
- UIButton 设置图片文字位置 -- imageEdgeInsets && titleEdgeInsets
- UIButton图片文字控件位置自定义(图片居右文字居左、图片居中文字居中、图片居左文字消失等)
- UIButton中图片与文字的位置设置
- 28.iOS - UIButton(UIEdgeInsets)/设置button上的文字和图片 在定义位置
- iOS UIButton 自定义图片和文字位置详解
- UIButton设置图片在上 文字在下的方法
- 设置UIButton的文字显示位置、字体的大小、字体的颜色 .
- 设置UIButton的文字显示位置、字体的大小、字体的颜色
- UIButton上的图片和文字位置调整
- jquery mobile 设置背景图片铺满整个屏幕以及自定义背景图文字颜色问题
- Android手动设置文字和图片的位置