UIButton图片文字控件位置自定义(图片居右文字居左、图片居中文字居中、图片居左文字消失等)

2024-02-13 11:38

本文主要是介绍UIButton图片文字控件位置自定义(图片居右文字居左、图片居中文字居中、图片居左文字消失等),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在开发中经常会碰到需要对按钮中的图片文字位置做调整的需求。
第一种方式是通过设置按钮中图片文字的偏移量。通过方法setTitleEdgeInsets和setImageEdgeInsets实现

代码如下:

/*!**方式一***/
- (void)updateBtnStyle_rightImage:(UIButton *)btn {CGFloat btnImageWidth = btn.imageView.bounds.size.width;CGFloat btnLabelWidth = btn.titleLabel.bounds.size.width;CGFloat margin = 3;btnImageWidth += margin;btnLabelWidth += margin;[btn setTitleEdgeInsets:UIEdgeInsetsMake(0, -btnImageWidth, 0, btnImageWidth)];[btn setImageEdgeInsets:UIEdgeInsetsMake(0, btnLabelWidth, 0, -btnLabelWidth)];
}

这种方式对普通的需求是可以满足的,但是操作起来麻烦,不是那么直观。对于像修改图片子控件的宽高这种高度自定义的行为是很难实现的。

第二种方式则可以像布局子视图一样自由调整图片和文字的位置,简单方便。可以调出需要的任意布局方式。

代码如下:

1.在.h文件中:

自定义类ZFButton,继承自UIButton。定义枚举ZFButtonType说明不同的类型。定义实例更新方法- (void)updateButtonStyleWithType:在需要的时候,根据自己的意愿更新成自己想要的样式。

#import <UIKit/UIKit.h>typedef enum : NSUInteger {ZFButtonTypeCenterImageCenterTitle,//图片,文字都居中ZFButtonTypeRightImageLeftTitle,//图片右,文字左ZFButtonTypeLeftImageNoneTitle,//图片左,文字无
} ZFButtonType;@interface ZFButton : UIButton
+ (instancetype)zfButtonWithType:(ZFButtonType)buttonType;- (void)updateButtonStyleWithType:(ZFButtonType)buttonType;
@end

2.中.m文件中:

重写方法- (void)layoutSubviews,根据不同的类型生成不同的布局。

- (void)layoutSubviews {[super layoutSubviews];if (self.type == ZFButtonTypeCenterImageCenterTitle) {[self resetBtnCenterImageCenterTitle];} else if (self.type == ZFButtonTypeLeftImageNoneTitle) {[self resetBtnLeftImageNotTitle];} else if (self.type == ZFButtonTypeRightImageLeftTitle) {[self resetBtnRightImageLeftTitle];}
}

工厂方法zfButtonWithType:创建不同类型的ZFButton。

实例更新方法- (void)updateButtonStyleWithType:更新成不同UI类型的Button

+ (instancetype)zfButtonWithType:(ZFButtonType)buttonType {ZFButton * btn = [ZFButton buttonWithType:UIButtonTypeCustom];btn.type = buttonType;return btn;
}- (void)updateButtonStyleWithType:(ZFButtonType)buttonType {self.type = buttonType;[self layoutSubviews];
}

具体算法如下:

#pragma mark - 私有方法
/*!**方式二***/
- (void)resetBtnCenterImageCenterTitle {self.imageView.frame = self.bounds;[self.imageView setContentMode:UIViewContentModeCenter];self.titleLabel.frame = self.bounds;self.titleLabel.textAlignment = NSTextAlignmentCenter;
}- (void)resetBtnLeftImageNotTitle {CGRect frame = self.bounds;frame.size.width *= 0.5;self.imageView.frame = frame;[self.imageView setContentMode:UIViewContentModeCenter];self.titleLabel.frame = CGRectZero;self.titleLabel.textAlignment = NSTextAlignmentCenter;
}- (void)resetBtnRightImageLeftTitle {CGRect frame = self.bounds;frame.size.width *= 0.5;self.titleLabel.frame = frame;self.titleLabel.textAlignment = NSTextAlignmentCenter;frame.origin.x = (self.bounds.size.width - frame.size.width);self.imageView.frame = frame;[self.imageView setContentMode:UIViewContentModeCenter];
}

效果图和层级图展示如下:

标题

这篇关于UIButton图片文字控件位置自定义(图片居右文字居左、图片居中文字居中、图片居左文字消失等)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/705429

相关文章

Python使用PIL库将PNG图片转换为ICO图标的示例代码

《Python使用PIL库将PNG图片转换为ICO图标的示例代码》在软件开发和网站设计中,ICO图标是一种常用的图像格式,特别适用于应用程序图标、网页收藏夹图标等场景,本文将介绍如何使用Python的... 目录引言准备工作代码解析实践操作结果展示结语引言在软件开发和网站设计中,ICO图标是一种常用的图像

dubbo3 filter(过滤器)如何自定义过滤器

《dubbo3filter(过滤器)如何自定义过滤器》dubbo3filter(过滤器)类似于javaweb中的filter和springmvc中的intercaptor,用于在请求发送前或到达前进... 目录dubbo3 filter(过滤器)简介dubbo 过滤器运行时机自定义 filter第一种 @A

SpringBoot集成图片验证码框架easy-captcha的详细过程

《SpringBoot集成图片验证码框架easy-captcha的详细过程》本文介绍了如何将Easy-Captcha框架集成到SpringBoot项目中,实现图片验证码功能,Easy-Captcha是... 目录SpringBoot集成图片验证码框架easy-captcha一、引言二、依赖三、代码1. Ea

如何使用CSS3实现波浪式图片墙

《如何使用CSS3实现波浪式图片墙》:本文主要介绍了如何使用CSS3的transform属性和动画技巧实现波浪式图片墙,通过设置图片的垂直偏移量,并使用动画使其周期性地改变位置,可以创建出动态且具有波浪效果的图片墙,同时,还强调了响应式设计的重要性,以确保图片墙在不同设备上都能良好显示,详细内容请阅读本文,希望能对你有所帮助...

Python脚本实现图片文件批量命名

《Python脚本实现图片文件批量命名》这篇文章主要为大家详细介绍了一个用python第三方库pillow写的批量处理图片命名的脚本,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言源码批量处理图片尺寸脚本源码GUI界面源码打包成.exe可执行文件前言本文介绍一个用python第三方库pi

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图

Python利用PIL进行图片压缩

《Python利用PIL进行图片压缩》有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所以本文为大家介绍了Python中图片压缩的方法,需要的可以参考下... 有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所有可以对文件中的图

java获取图片的大小、宽度、高度方式

《java获取图片的大小、宽度、高度方式》文章介绍了如何将File对象转换为MultipartFile对象的过程,并分享了个人经验,希望能为读者提供参考... 目China编程录Java获取图片的大小、宽度、高度File对象(该对象里面是图片)MultipartFile对象(该对象里面是图片)总结java获取图片

Java实战之自助进行多张图片合成拼接

《Java实战之自助进行多张图片合成拼接》在当今数字化时代,图像处理技术在各个领域都发挥着至关重要的作用,本文为大家详细介绍了如何使用Java实现多张图片合成拼接,需要的可以了解下... 目录前言一、图片合成需求描述二、图片合成设计与实现1、编程语言2、基础数据准备3、图片合成流程4、图片合成实现三、总结前

使用Python实现图片和base64转换工具

《使用Python实现图片和base64转换工具》这篇文章主要为大家详细介绍了如何使用Python中的base64模块编写一个工具,可以实现图片和Base64编码之间的转换,感兴趣的小伙伴可以了解下... 简介使用python的base64模块来实现图片和Base64编码之间的转换。可以将图片转换为Bas