123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- //
- // UIButton+ext.swift
- // PQSpeed
- //
- // Created by ak on 2020/8/14.
- // Copyright © 2020 BytesFlow. All rights reserved.
- //
- /**
- UIButton图像文字同时存在时---图像相对于文字的位置
- - top: 图像在上
- - left: 图像在左
- - right: 图像在右
- - bottom: 图像在下
- */
- public enum PQButtonImageEdgeInsetsStyle {
- case top, left, right, bottom
- }
- import Foundation
- public extension UIButton {
- func imagePosition(at style: PQButtonImageEdgeInsetsStyle, space: CGFloat) {
- guard let imageV = imageView else { return }
- guard let titleL = titleLabel else { return }
- // 获取图像的宽和高
- let imageWidth = imageV.frame.size.width
- let imageHeight = imageV.frame.size.height
- // 获取文字的宽和高
- let labelWidth = titleL.frame.size.width
- let labelHeight = titleL.frame.size.height
- var imageEdgeInsets = UIEdgeInsets.zero
- var labelEdgeInsets = UIEdgeInsets.zero
- // UIButton同时有图像和文字的正常状态---左图像右文字,间距为0
- switch style {
- case .left:
- // 正常状态--只不过加了个间距
- imageEdgeInsets = UIEdgeInsets(top: 0, left: -space * 0.5, bottom: 0, right: space * 0.5)
- labelEdgeInsets = UIEdgeInsets(top: 0, left: space * 0.5, bottom: 0, right: -space * 0.5)
- case .right:
- // 切换位置--左文字右图像
- // 图像:UIEdgeInsets的left是相对于UIButton的左边移动了labelWidth + space * 0.5,right相对于label的左边移动了-labelWidth - space * 0.5
- imageEdgeInsets = UIEdgeInsets(top: 0, left: labelWidth + space * 0.5, bottom: 0, right: -labelWidth - space * 0.5)
- labelEdgeInsets = UIEdgeInsets(top: 0, left: -imageWidth - space * 0.5, bottom: 0, right: imageWidth + space * 0.5)
- case .top:
- // 切换位置--上图像下文字
- /** 图像的中心位置向右移动了labelWidth * 0.5,向上移动了-imageHeight * 0.5 - space * 0.5
- *文字的中心位置向左移动了imageWidth * 0.5,向下移动了labelHeight*0.5+space*0.5
- */
- imageEdgeInsets = UIEdgeInsets(top: -(imageHeight * 0.5 - space), left: labelWidth * 0.5, bottom: imageHeight * 0.5 - space, right: -labelWidth * 0.5)
- labelEdgeInsets = UIEdgeInsets(top: labelHeight * 0.5 + space * 2, left: -imageWidth * 0.5, bottom: -(labelHeight * 0.5 + space * 2), right: imageWidth * 0.5)
- case .bottom:
- // 切换位置--下图像上文字
- /** 图像的中心位置向右移动了labelWidth * 0.5,向下移动了imageHeight * 0.5 + space * 0.5
- *文字的中心位置向左移动了imageWidth * 0.5,向上移动了labelHeight*0.5+space*0.5
- */
- imageEdgeInsets = UIEdgeInsets(top: imageHeight * 0.5 + space * 0.5, left: labelWidth * 0.5, bottom: -imageHeight * 0.5 - space * 0.5, right: -labelWidth * 0.5)
- labelEdgeInsets = UIEdgeInsets(top: -labelHeight * 0.5 - space * 0.5, left: -imageWidth * 0.5, bottom: labelHeight * 0.5 + space * 0.5, right: imageWidth * 0.5)
- }
- titleEdgeInsets = labelEdgeInsets
- self.imageEdgeInsets = imageEdgeInsets
- }
- }
|