Instantly share code, notes, and snippets.
Created
May 9, 2017 07:20
-
Star
(0)
0
You must be signed in to star a gist -
Fork
(0)
0
You must be signed in to fork a gist
-
Save walkerwzy/e0a8baa222a807ebb6b08250f339e8c7 to your computer and use it in GitHub Desktop.
layout button button's image and title's position in some common circumstances
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// UIButton+ImageTitleStyle.h | |
// | |
// Created by 欧阳大哥 on 14-7-13. | |
// QQ:156355113 | |
// Github: https://github.com/youngsoft | |
// Email: obq0387_cn@sina.com | |
// | |
#import <UIKit/UIKit.h> | |
/* | |
针对同时设置了Image和Title的场景时UIButton中的图片和文字的关系 | |
*/ | |
typedef NS_ENUM(NSInteger, ButtonImageTitleStyle ) { | |
ButtonImageTitleStyleDefault = 0, //图片在左,文字在右,整体居中。 | |
ButtonImageTitleStyleLeft = 0, //图片在左,文字在右,整体居中。 | |
ButtonImageTitleStyleRight = 2, //图片在右,文字在左,整体居中。 | |
ButtonImageTitleStyleTop = 3, //图片在上,文字在下,整体居中。 | |
ButtonImageTitleStyleBottom = 4, //图片在下,文字在上,整体居中。 | |
ButtonImageTitleStyleCenterTop = 5, //图片居中,文字在上距离按钮顶部。 | |
ButtonImageTitleStyleCenterBottom = 6, //图片居中,文字在下距离按钮底部。 | |
ButtonImageTitleStyleCenterUp = 7, //图片居中,文字在图片上面。 | |
ButtonImageTitleStyleCenterDown = 8, //图片居中,文字在图片下面。 | |
ButtonImageTitleStyleRightLeft = 9, //图片在右,文字在左,距离按钮两边边距 | |
ButtonImageTitleStyleLeftRight = 10, //图片在左,文字在右,距离按钮两边边距 | |
}; | |
@interface UIButton (ImageTitleStyle) | |
/* | |
调整按钮的文本和image的布局,前提是title和image同时存在才会调整。 | |
padding是调整布局时整个按钮和图文的间隔。 | |
*/ | |
-(void)setButtonImageTitleStyle:(ButtonImageTitleStyle)style padding:(CGFloat)padding; | |
@end | |
实现文件: | |
// | |
// UIButton+ImageTitleStyle.m | |
// | |
// Created by 欧阳大哥 on 14-7-13. | |
// | |
#import "UIButton+ImageTitleStyle.h" | |
@implementation UIButton (ImageTitleStyle) | |
-(void)setButtonImageTitleStyle:(ButtonImageTitleStyle)style padding:(CGFloat)padding | |
{ | |
if (self.imageView.image != nil && self.titleLabel.text != nil) | |
{ | |
//先还原 | |
self.titleEdgeInsets = UIEdgeInsetsZero; | |
self.imageEdgeInsets = UIEdgeInsetsZero; | |
CGRect imageRect = self.imageView.frame; | |
CGRect titleRect = self.titleLabel.frame; | |
CGFloat totalHeight = imageRect.size.height + padding + titleRect.size.height; | |
CGFloat selfHeight = self.frame.size.height; | |
CGFloat selfWidth = self.frame.size.width; | |
switch (style) { | |
case ButtonImageTitleStyleLeft: | |
if (padding != 0) | |
{ | |
self.titleEdgeInsets = UIEdgeInsetsMake(0, | |
padding/2, | |
0, | |
-padding/2); | |
self.imageEdgeInsets = UIEdgeInsetsMake(0, | |
-padding/2, | |
0, | |
padding/2); | |
} | |
break; | |
case ButtonImageTitleStyleRight: | |
{ | |
//图片在右,文字在左 | |
self.titleEdgeInsets = UIEdgeInsetsMake(0, | |
-(imageRect.size.width + padding/2), | |
0, | |
(imageRect.size.width + padding/2)); | |
self.imageEdgeInsets = UIEdgeInsetsMake(0, | |
(titleRect.size.width+ padding/2), | |
0, | |
-(titleRect.size.width+ padding/2)); | |
} | |
break; | |
case ButtonImageTitleStyleTop: | |
{ | |
//图片在上,文字在下 | |
self.titleEdgeInsets = UIEdgeInsetsMake(((selfHeight - totalHeight)/2 + imageRect.size.height + padding - titleRect.origin.y), | |
(selfWidth/2 - titleRect.origin.x - titleRect.size.width /2) - (selfWidth - titleRect.size.width) / 2, | |
-((selfHeight - totalHeight)/2 + imageRect.size.height + padding - titleRect.origin.y), | |
-(selfWidth/2 - titleRect.origin.x - titleRect.size.width /2) - (selfWidth - titleRect.size.width) / 2); | |
self.imageEdgeInsets = UIEdgeInsetsMake(((selfHeight - totalHeight)/2 - imageRect.origin.y), | |
(selfWidth /2 - imageRect.origin.x - imageRect.size.width / 2), | |
-((selfHeight - totalHeight)/2 - imageRect.origin.y), | |
-(selfWidth /2 - imageRect.origin.x - imageRect.size.width / 2)); | |
} | |
break; | |
case ButtonImageTitleStyleBottom: | |
{ | |
//图片在下,文字在上。 | |
self.titleEdgeInsets = UIEdgeInsetsMake(((selfHeight - totalHeight)/2 - titleRect.origin.y), | |
(selfWidth/2 - titleRect.origin.x - titleRect.size.width / 2) - (selfWidth - titleRect.size.width) / 2, | |
-((selfHeight - totalHeight)/2 - titleRect.origin.y), | |
-(selfWidth/2 - titleRect.origin.x - titleRect.size.width / 2) - (selfWidth - titleRect.size.width) / 2); | |
self.imageEdgeInsets = UIEdgeInsetsMake(((selfHeight - totalHeight)/2 + titleRect.size.height + padding - imageRect.origin.y), | |
(selfWidth /2 - imageRect.origin.x - imageRect.size.width / 2), | |
-((selfHeight - totalHeight)/2 + titleRect.size.height + padding - imageRect.origin.y), | |
-(selfWidth /2 - imageRect.origin.x - imageRect.size.width / 2)); | |
} | |
break; | |
case ButtonImageTitleStyleCenterTop: | |
{ | |
self.titleEdgeInsets = UIEdgeInsetsMake(-(titleRect.origin.y - padding), | |
(selfWidth / 2 - titleRect.origin.x - titleRect.size.width / 2) - (selfWidth - titleRect.size.width) / 2, | |
(titleRect.origin.y - padding), | |
-(selfWidth / 2 - titleRect.origin.x - titleRect.size.width / 2) - (selfWidth - titleRect.size.width) / 2); | |
self.imageEdgeInsets = UIEdgeInsetsMake(0, | |
(selfWidth / 2 - imageRect.origin.x - imageRect.size.width / 2), | |
0, | |
-(selfWidth / 2 - imageRect.origin.x - imageRect.size.width / 2)); | |
} | |
break; | |
case ButtonImageTitleStyleCenterBottom: | |
{ | |
self.titleEdgeInsets = UIEdgeInsetsMake((selfHeight - padding - titleRect.origin.y - titleRect.size.height), | |
(selfWidth / 2 - titleRect.origin.x - titleRect.size.width / 2) - (selfWidth - titleRect.size.width) / 2, | |
-(selfHeight - padding - titleRect.origin.y - titleRect.size.height), | |
-(selfWidth / 2 - titleRect.origin.x - titleRect.size.width / 2) - (selfWidth - titleRect.size.width) / 2); | |
self.imageEdgeInsets = UIEdgeInsetsMake(0, | |
(selfWidth / 2 - imageRect.origin.x - imageRect.size.width / 2), | |
0, | |
-(selfWidth / 2 - imageRect.origin.x - imageRect.size.width / 2)); | |
} | |
break; | |
case ButtonImageTitleStyleCenterUp: | |
{ | |
self.titleEdgeInsets = UIEdgeInsetsMake(-(titleRect.origin.y + titleRect.size.height - imageRect.origin.y + padding), | |
(selfWidth / 2 - titleRect.origin.x - titleRect.size.width / 2) - (selfWidth - titleRect.size.width) / 2, | |
(titleRect.origin.y + titleRect.size.height - imageRect.origin.y + padding), | |
-(selfWidth / 2 - titleRect.origin.x - titleRect.size.width / 2) - (selfWidth - titleRect.size.width) / 2); | |
self.imageEdgeInsets = UIEdgeInsetsMake(0, | |
(selfWidth / 2 - imageRect.origin.x - imageRect.size.width / 2), | |
0, | |
-(selfWidth / 2 - imageRect.origin.x - imageRect.size.width / 2)); | |
} | |
break; | |
case ButtonImageTitleStyleCenterDown: | |
{ | |
self.titleEdgeInsets = UIEdgeInsetsMake((imageRect.origin.y + imageRect.size.height - titleRect.origin.y + padding), | |
(selfWidth / 2 - titleRect.origin.x - titleRect.size.width / 2) - (selfWidth - titleRect.size.width) / 2, | |
-(imageRect.origin.y + imageRect.size.height - titleRect.origin.y + padding), | |
-(selfWidth / 2 - titleRect.origin.x - titleRect.size.width / 2) - (selfWidth - titleRect.size.width) / 2); | |
self.imageEdgeInsets = UIEdgeInsetsMake(0, | |
(selfWidth / 2 - imageRect.origin.x - imageRect.size.width / 2), | |
0, | |
-(selfWidth / 2 - imageRect.origin.x - imageRect.size.width / 2)); | |
} | |
break; | |
case ButtonImageTitleStyleRightLeft: | |
{ | |
//图片在右,文字在左,距离按钮两边边距 | |
self.titleEdgeInsets = UIEdgeInsetsMake(0, | |
-(titleRect.origin.x - padding), | |
0, | |
(titleRect.origin.x - padding)); | |
self.imageEdgeInsets = UIEdgeInsetsMake(0, | |
(selfWidth - padding - imageRect.origin.x - imageRect.size.width), | |
0, | |
-(selfWidth - padding - imageRect.origin.x - imageRect.size.width)); | |
} | |
break; | |
case ButtonImageTitleStyleLeftRight: | |
{ | |
//图片在左,文字在右,距离按钮两边边距 | |
self.titleEdgeInsets = UIEdgeInsetsMake(0, | |
(selfWidth - padding - titleRect.origin.x - titleRect.size.width), | |
0, | |
-(selfWidth - padding - titleRect.origin.x - titleRect.size.width)); | |
self.imageEdgeInsets = UIEdgeInsetsMake(0, | |
-(imageRect.origin.x - padding), | |
0, | |
(imageRect.origin.x - padding)); | |
} | |
break; | |
default: | |
break; | |
} | |
} | |
else { | |
self.titleEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0); | |
self.imageEdgeInsets = UIEdgeInsetsMake(0, 0, 0, 0); | |
} | |
} | |
@end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment