iOS - UIButton设置图片文字上图下文排列
ios 设置 图片 文字 排列 UIButton
2023-09-11 14:21:34 时间
经查阅资料及尝试,最终解决了在图片和文字垂直排列的情况下,如果文字长度变化会导致图片位置变动的问题,最开始采用了网上比较多的做法,做法如下:
@interface UIButton (UIButtonExt)
- (void)centerImageAndTitle:(float)space;
- (void)centerImageAndTitle;
@end
@implementation UIButton (UIButtonExt)
- (void)centerImageAndTitle:(float)spacing
{
// get the size of the elements here for readability
CGSize imageSize = self.imageView.frame.size;
CGSize titleSize = self.titleLabel.frame.size;
// get the height they will take up as a unit
CGFloat totalHeight = (imageSize.height + titleSize.height + spacing);
// raise the image and push it right to center it
self.imageEdgeInsets = UIEdgeInsetsMake(- (totalHeight - imageSize.height), 0.0, 0.0, - titleSize.width);
// lower the text and push it left to center it
self.titleEdgeInsets = UIEdgeInsetsMake(0.0, - imageSize.width, - (totalHeight - titleSize.height),0.0);
}
- (void)centerImageAndTitle
{
const int DEFAULT_SPACING = 6.0f;
[self centerImageAndTitle:DEFAULT_SPACING];
}
@end
后面经过测试,如果button的文字长度变更,会导致图片位置变化,经过多次修改UIEdgeInsets的值也没有达到期望效果,最终采用集成UIButton类,重写layoutSubviews函数实现,特将成果记录一下,以便后续查阅
-(void)layoutSubviews {
[super layoutSubviews];
// Center image
CGPoint center = self.imageView.center;
center.x = self.frame.size.width/2;
center.y = self.imageView.frame.size.height/2;
self.imageView.center = center;
//Center text
CGRect newFrame = [self titleLabel].frame;
newFrame.origin.x = 0;
newFrame.origin.y = self.imageView.frame.size.height + 5;
newFrame.size.width = self.frame.size.width;
self.titleLabel.frame = newFrame;
self.titleLabel.textAlignment = UITextAlignmentCenter;
}
通过重写,重新设置imageView的Center和titleLabel的Frame解决上述问题。
相关文章
- iOS/OS X内存管理(一):基本概念与原理
- iOS设计模式 - 单例
- iOS短信验证码SDK集成文档
- IOS 30多个iOS常用动画,带详细注释
- iOS之UI--指示器HUD的创建和设置
- iOS开发UI篇—Button基础
- iOS开发UI篇—ios应用数据存储方式(XML属性列表-plist)
- h5 ios手机 隐藏input输入光标
- 【IOS-COCOS2D游戏开发之二十一 】自定义精灵类并为你的精灵设置攻击帧(指定开始帧)以及扩展COCOS2D源码的CCANIMATION简化动画创建!
- iOS 南京互联网大会分享及个人见解
- iOS中 动态启动图GIF的简单设置
- IOS中 浅谈iOS中MVVM的架构设计与团队协作
- ios swift5 tableViewCell 左滑 出现两个点击按钮
- iOS swift 设置UIButton字体大小
- iOS 组件化 模块化(二)
- ios swift5 设置PingFangSC字体
- iOS swift5.5 oc 用代码设置字体类型和大小 NSMutableAttributedString
- iOS swift 5 present从下面弹出一半 设置速度档位
- iOS 网络 HTTP(Hyper Text Transfer Protocol)超文本传输协议
- iOS swift block防止循环引用
- iOS 什么是Block
- ios UILabel 切圆角 cornerRadius无效
- ios 查看用户是否授予了定位权限,未授予则跳到设置界面
- iOS(swift)UIView设置边框,切圆角
- cordova(ios android)位置权限 gps位置开关开启 跳到设置界面
- 【iOS】UICollectionView自己定义Layout之蜂窝布局
- iOS UIWebView 载入https 网站出现NSURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL,