iOS开发技巧:布局UIButton的imageView和titleLabel属性

前言

这是iOS开发技巧系列博客的第三篇,本篇我主要想给大家分享一下按钮标题以及图片视图的布局方法。我记得在我初学iOS编程做一个项目的时候,有一个视图上面是图片,下面是标题的需求,类似于美团的分类,不管点击标题还是图片,都会触发事件,看做一个整体。我当时的做法是,封装一个视图,添加一个UIButton和一个UIImageView,然后用一个视图把其覆盖并为该视图添加点击手势,当然,这个视图是透明的,这样功能也就实现了,但效果并不理想。后来,我在朋友提示看UIButton头文件的时候,发现有一个imageView属性,因为当时学习的时候还没有阅读头文件的习惯,仅仅只通过titleLabel属性去设置字体大小而已,并没有想到会有imageView这个属性存在。我尝试着为按钮设置该属性,然后我惊奇的发现了标题和图片都显示出来了,这样,一个UIButton就可以搞定当时项目的需求了。只是,这个位置并非是我想要的,因为这样设置之后图片居左,文字居右,后来上网查了很多资料,了解到通过UIButton的titleEdgeInsetsimageEdgeInsets属性,可以调整标题和图片的偏移,管理其布局。那么接下来呢,我将结合几个场景分享通过这两个属性布局按钮imageView和titleLabel的方法。

场景一:图片居左,文字居右

默认情况下,titleEdgeInsetsimageEdgeInsets的值为:UIEdgeInsetsZero。是图片居左,文字居右,垂直居中显示的,如下图:

button.titleEdgeInsets = UIEdgeInsetsZero

button.imageEdgeInsets = UIEdgeInsetsZero

这里写图片描述

场景二:图片居中,文字居中

设置方法如下:

button.titleEdgeInsets = UIEdgeInsets(top: 0.0, left: -button.imageView!.frame.width, bottom: 0.0, right: 0.0)

button.imageEdgeInsets = UIEdgeInsets(top: 0.0, left: 0.0, bottom: 0.0, right: -button.titleLabel!.intrinsicContentSize().width)

这里写图片描述

场景三:图片居上,文字居下,水平居中

设置方法如下:

button.titleEdgeInsets = UIEdgeInsets(top: 0.0, left: -button.imageView!.frame.width, bottom: -button.imageView!.frame.height, right: 0.0)

button.imageEdgeInsets = UIEdgeInsets(top: -button.titleLabel!.intrinsicContentSize().height, left: 0.0, bottom: 0.0, right: -button.titleLabel!.intrinsicContentSize().width)

这里写图片描述

可能你会觉得图片和文字挨的太紧了,不过没有关系,我们可通过以下方法将其稍微分开一点。

let offset = 45

button.titleEdgeInsets = UIEdgeInsets(top: 0.0, left: -button.imageView!.frame.width, bottom: -button.imageView!.frame.height - CGFloat(offset / 2), right: 0.0)

button.imageEdgeInsets = UIEdgeInsets(top: -button.titleLabel!.intrinsicContentSize().height - CGFloat(offset / 2), left: 0.0, bottom: 0.0, right: -button.titleLabel!.intrinsicContentSize().width)

这里写图片描述

场景四:图片居右,文字居左

设置方法如下:

button.titleEdgeInsets = UIEdgeInsets(top: 0.0, left: -button.imageView!.frame.size.width - button.frame.size.width + button.titleLabel!.intrinsicContentSize().width, bottom: 0.0, right: 0.0)

button.imageEdgeInsets = UIEdgeInsets(top: 0.0, left: 0.0, bottom: 0.0, right: -button.titleLabel!.frame.size.width - button.frame.size.width + button.imageView!.frame.size.width)

这里写图片描述

到这里,本篇的开发技巧分享就结束了,感谢大家的关注与支持,我将继续更新后续的文章,敬请期待。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值