2.Swift基础控件:图标文字按钮

Swift图标标题按钮

一、自定义IconTitleButton类


import Foundation/*
枚举 设置 图片的位置
*/
enum ButtonImagePosition : Int  {case imageTop = 0case imageLeftcase imageBottomcase imageRight
}
extension UIButton {/**type :image 的位置Space :图片文字之间的间距*/
func setImagePosition(type:ButtonImagePosition,Space space:CGFloat)  {let imageWith :CGFloat = (imageView?.frame.size.width)!let imageHeight :CGFloat = (imageView?.frame.size.height)!var labelWidth :CGFloat = 0.0var labelHeight :CGFloat = 0.0labelWidth = CGFloat(titleLabel!.intrinsicContentSize.width)labelHeight = CGFloat(titleLabel!.intrinsicContentSize.height)var  imageEdgeInsets :UIEdgeInsets = UIEdgeInsets()var  labelEdgeInsets :UIEdgeInsets = UIEdgeInsets()switch type {case .imageTop:imageEdgeInsets = UIEdgeInsets.init(top: -labelHeight - space/2.0, left: 0, bottom: 0, right:  -labelWidth)labelEdgeInsets =  UIEdgeInsets.init(top:0, left: -imageWith, bottom: -imageHeight-space/2.0, right: 0)break;case .imageLeft:imageEdgeInsets = UIEdgeInsets.init(top:0, left:-space/2.0, bottom: 0, right:space/2.0)labelEdgeInsets =  UIEdgeInsets.init(top:0, left:space/2.0, bottom: 0, right: -space/2.0)break;case .imageBottom:imageEdgeInsets = UIEdgeInsets.init(top:0, left:0, bottom: -labelHeight-space/2.0, right: -labelWidth)labelEdgeInsets =  UIEdgeInsets.init(top:-imageHeight-space/2.0, left:-imageWith, bottom: 0, right: 0)break;case .imageRight:imageEdgeInsets = UIEdgeInsets.init(top:0, left:labelWidth+space/2.0, bottom: 0, right: -labelWidth-space/2.0)labelEdgeInsets =  UIEdgeInsets.init(top:0, left:-imageWith-space/2.0, bottom: 0, right:imageWith+space/2.0)break;}self.titleEdgeInsets = labelEdgeInsetsself.imageEdgeInsets = imageEdgeInsets}}

二、使用

import UIKitclass IconTitleButtonController: BaseViewController {override func viewDidLoad() {super.viewDidLoad()view.addSubview(btn1)view.addSubview(btn2)view.addSubview(btn3)view.addSubview(btn4)}lazy var btn1:UIButton =  {let btn = UIButton.init(frame: CGRect.init(x: 50, y: 100, width: 120, height: 40))btn.backgroundColor = .graybtn.setImage(UIImage.init(named: "tabbar_2a"), for: .normal)btn.setTitle("测试标题", for: .normal)btn.setImagePosition(type: .imageLeft, Space: 5)return btn}()lazy var btn2:UIButton = {let btn = UIButton.init(frame: CGRect.init(x: 50, y: 160, width: 120, height: 40))btn.backgroundColor = .graybtn.setImage(UIImage.init(named: "tabbar_2a"), for: .normal)btn.setTitle("测试标题", for: .normal)![]()btn.setImagePosition(type: .imageRight, Space: 5)return btn}()lazy var btn3:UIButton = {let btn = UIButton.init(frame: CGRect.init(x: 50, y:220, width: 120, height: 80))btn.backgroundColor = .graybtn.setImage(UIImage.init(named: "tabbar_2a"), for: .normal)btn.setTitle("测试标题", for: .normal)btn.setImagePosition(type: .imageTop, Space: 10)return btn}()lazy var btn4:UIButton = {let btn = UIButton.init(frame: CGRect.init(x: 50, y: 320, width: 120, height: 80))btn.backgroundColor = .graybtn.setImage(UIImage.init(named: "tabbar_2a"), for: .normal)btn.setTitle("测试标题", for: .normal)btn.setImagePosition(type: .imageBottom, Space: 10)return btn}()
}

三、效果图

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/297870.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安装Docker(CentOS)

Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,强调安全,付费使用,支持周期 24 个月。 Docker CE 分为 stable test 和 nightly 三个更新频道。 官方网站上…

的C++奇迹之旅:值和引用的本质效率与性能比较

文章目录 请添加图片描述 [TOC](文章目录) 📝引用# 🌠引用概念**引用**不是新定义一个变量,而是给**已存在变量取了一个别名**,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。>定义&#…

DevC++ 的对拍教程

目录 一:首先准备DevC 二:创建源代码 1. 然后分别写代码,认为自己能把握100%做对的暴力代码写进ba1.cpp 2. 然后写自己的解决问题的代码,不确定的,要认证准确性的代码写进wt1.cpp 3. 然后写数据代码,…

应急响应实战笔记05Linux实战篇(2)

第2篇:捕捉短连接 0x00 前言 ​ 短连接(short connnection)是相对于长连接而言的概念,指的是在数据传送过程中,只在需要发送数据时,才去建立一个连接,数据发送完成后,则断开此连接…

C++数据结构与算法——二叉树公共祖先问题

C第二阶段——数据结构和算法,之前学过一点点数据结构,当时是基于Python来学习的,现在基于C查漏补缺,尤其是树的部分。这一部分计划一个月,主要利用代码随想录来学习,刷题使用力扣网站,不定时更…

ruoyi-nbcio-plus基于vue3的flowable流程元素选择区面板的升级修改

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a…

C++ 指针与数组

指针与数组名都是地址,可以混合使用访问数组元素。 用指针访问数组,计算数组元素之和。 总结 如图所示,获取数组起始地址的方法有两种, 其一为数组名, 其二为通过数组的首元素地址。指针变量p是通过数组名获得指向…

突破!AI机器人拥有嗅觉!仿生嗅觉芯片研究登上Nature子刊

我们一直梦想着让AI与人类能够更加相似,赋予它们视觉与听觉。而让机器人拥有嗅觉一直以来面临着巨大的困难。 香港科技大学范志勇教授领导的研究团队凭借最新研发的仿生嗅觉芯片(BOC)在这一领域取得了重大突破。该研究成果目前已被发表到IF …

苍穹外卖07(缓存菜品,SpringCache,缓存套餐,添加购物车菜品和套餐多下单,查看购物车,清除购物车,删除购物车中一个商品)

目录 一、缓存菜品 1 问题说明 2 实现思路 3 代码开发:修改DishServiceImpl 4 功能测试 二、SpringCache 1. 介绍 2. 使用语法 1 起步依赖 2 使用要求 3 常用注解 4 SpEL表达式(了解备用) 5 步骤小结 3.入门案例 1 准备环境 2 使用入门 1 引导类上加…

网易大模型 RAG 问答知识库开源,Star 超 6K!!

节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学,针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 基于大模…

金融贷款批准预测项目

注意:本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 ([www.aideeplearning.cn]) 在金融服务行业,贷款审批是一项关键任务,它不仅关系到资金的安全,还直接影响到金融机构的运营效率和风险管理…

编译与链接

一块代码要生成可执行程序需要经过编译(编译器完成)和链接(链接器完成)两个操作。 而编译又细分为预处理,编译和汇编(即编译预处理编译汇编) 编译阶段每个源⽂件(.c为后缀的⽂件)单独处理⽣成对应的⽬标⽂件(.obj为后缀的⽂件) 链接阶段会把多个⽬标⽂件和库⽂件…

【Java】jdk1.8 Java代理模式,Jdk动态代理讲解(非常详细,附带class文件)

📝个人主页:哈__ 期待您的关注 一、什么是代理模式 想要学代理模式,我们就要先弄清一个概念“什么是代理”? 在我们的现实生活中,你或许不少听过关于代理的名词,如:代理商。那什么又叫做代理…

【大数据存储】实验七 Spark RDD

Spark RDD操作实验 一、实验目的 (1)掌握使用Spark访问本地文件和HDFS文件的方法 (2)熟练掌握在Spark Shell中对Spark RDD的操作方法 (3)掌握Spark应用程序的编写、编译打包和运行方法 二、.实验平台 …

【无限列车1】SpringCloudAlibaba 与 SpringBoot后端架构的搭建

【无限列车1】SpringCloudAlibaba 与 SpringBoot后端架构的搭建 1、版本说明二、日志相关配置3、AOP 打印日志4、下载开源前端后台管理系统5、添加网关模块6、集成数据库和mp(1) 添加驱动和mp依赖(2) 数据库配置(3) 使用MybatisPlus 7、加密 yaml 文件中的内容(1) 依赖(2) 敏感…

ES6: class类

类 class 面相对象class关键字创建类关于类的继承 面相对象 一切皆对象。 举例: 操作浏览器要使用window对象;操作网页要使用document对象;操作控制台要使用console对象; ES6中增加了类的概念,其实ES5中已经可以实现类…

SpringBoot整合knife4J 3.0.3

Knife4j的前身是swagger-bootstrap-ui,前身swagger-bootstrap-ui是一个纯swagger-ui的ui皮肤项目。项目正式更名为knife4j,取名knife4j是希望她能像一把匕首一样小巧,轻量,并且功能强悍,更名也是希望把她做成一个为Swagger接口文档服务的通用性解决方案,不仅仅只是专注于前端Ui…

基于ArrayList实现简单洗牌

前言 在之前的那篇文章中,我们已经认识了顺序表—>http://t.csdnimg.cn/2I3fE 基于此,便好理解ArrayList和后面的洗牌游戏了。 什么是ArrayList? ArrayList底层是一段连续的空间,并且可以动态扩容,是一个动态类型的顺序表&…

第二十三章 Git

一、Git Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版…

YOLOv8 UI界面设计+热力图显示

进入可视化设计界面,设计UI pyside6-designer 设计好UI保存,然后通过以下命令将ui文件保存为py pyside6-uic myui.ui > myui.py 通过以下命令将资源文件qrc保存为py pyside6-rcc my_rc.qrc > my_rc.py 写主窗口函数实现功能... 项目基于yol…