12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- //
- // IHButtonExtension.swift
- // Inhealth
- //
- // Created by weclouds on 2020/4/17.
- // Copyright © 2020 weclouds. All rights reserved.
- //
- import UIKit
- enum ButtonEdgeInsetsStyle {
- // 图片相对于label的位置
- case Top
- case Left
- case Right
- case Bottom
- }
- extension UIButton {
-
- func layoutButton(style: ButtonEdgeInsetsStyle, imageTitleSpace: CGFloat) {
- //得到imageView和titleLabel的宽高
- let imageWidth = self.imageView?.frame.size.width
- let imageHeight = self.imageView?.frame.size.height
-
- var labelWidth: CGFloat! = 0.0
- var labelHeight: CGFloat! = 0.0
-
- labelWidth = self.titleLabel?.intrinsicContentSize.width
- labelHeight = self.titleLabel?.intrinsicContentSize.height
-
- //初始化imageEdgeInsets和labelEdgeInsets
- var imageEdgeInsets = UIEdgeInsets.zero
- var labelEdgeInsets = UIEdgeInsets.zero
-
- //根据style和space得到imageEdgeInsets和labelEdgeInsets的值
- switch style {
- /**
- * titleEdgeInsets是titleLabel相对于其上下左右的inset,跟tableView的contentInset是类似的;
- * 如果只有title,那titleLabel的 上下左右 都是 相对于Button 的;
- * 如果只有image,那imageView的 上下左右 都是 相对于Button 的;
- * 如果同时有image和label,那image的 上下左 是 相对于Button 的,右 是 相对于label 的;
- * label的 上下右 是 相对于Button的, 左 是 相对于label 的。
- */
- case .Top:
- //上 左 下 右
- imageEdgeInsets = UIEdgeInsets(top: -labelHeight-imageTitleSpace/2, left: 0, bottom: 0, right: -labelWidth)
- labelEdgeInsets = UIEdgeInsets(top: 0, left: -imageWidth!, bottom: -imageHeight!-imageTitleSpace/2, right: 0)
- break;
-
- case .Left:
- imageEdgeInsets = UIEdgeInsets(top: 0, left: -imageTitleSpace/2, bottom: 0, right: imageTitleSpace)
- labelEdgeInsets = UIEdgeInsets(top: 0, left: imageTitleSpace/2, bottom: 0, right: -imageTitleSpace/2)
- break;
-
- case .Bottom:
- imageEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: -labelHeight!-imageTitleSpace/2, right: -labelWidth)
- labelEdgeInsets = UIEdgeInsets(top: -imageHeight!-imageTitleSpace/2, left: -imageWidth!, bottom: 0, right: 0)
- break;
-
- case .Right:
- imageEdgeInsets = UIEdgeInsets(top: 0, left: labelWidth+imageTitleSpace/2, bottom: 0, right: -labelWidth-imageTitleSpace/2)
- labelEdgeInsets = UIEdgeInsets(top: 0, left: -imageWidth!-imageTitleSpace/2, bottom: 0, right: imageWidth!+imageTitleSpace/2)
- break;
- }
-
- self.titleEdgeInsets = labelEdgeInsets
- self.imageEdgeInsets = imageEdgeInsets
-
- }
- }
|