IHButtonExtension.swift 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. //
  2. // IHButtonExtension.swift
  3. // Inhealth
  4. //
  5. // Created by weclouds on 2020/4/17.
  6. // Copyright © 2020 weclouds. All rights reserved.
  7. //
  8. import UIKit
  9. enum ButtonEdgeInsetsStyle {
  10. // 图片相对于label的位置
  11. case Top
  12. case Left
  13. case Right
  14. case Bottom
  15. }
  16. extension UIButton {
  17. func layoutButton(style: ButtonEdgeInsetsStyle, imageTitleSpace: CGFloat) {
  18. //得到imageView和titleLabel的宽高
  19. let imageWidth = self.imageView?.frame.size.width
  20. let imageHeight = self.imageView?.frame.size.height
  21. var labelWidth: CGFloat! = 0.0
  22. var labelHeight: CGFloat! = 0.0
  23. labelWidth = self.titleLabel?.intrinsicContentSize.width
  24. labelHeight = self.titleLabel?.intrinsicContentSize.height
  25. //初始化imageEdgeInsets和labelEdgeInsets
  26. var imageEdgeInsets = UIEdgeInsets.zero
  27. var labelEdgeInsets = UIEdgeInsets.zero
  28. //根据style和space得到imageEdgeInsets和labelEdgeInsets的值
  29. switch style {
  30. /**
  31. * titleEdgeInsets是titleLabel相对于其上下左右的inset,跟tableView的contentInset是类似的;
  32. * 如果只有title,那titleLabel的 上下左右 都是 相对于Button 的;
  33. * 如果只有image,那imageView的 上下左右 都是 相对于Button 的;
  34. * 如果同时有image和label,那image的 上下左 是 相对于Button 的,右 是 相对于label 的;
  35. * label的 上下右 是 相对于Button的, 左 是 相对于label 的。
  36. */
  37. case .Top:
  38. //上 左 下 右
  39. imageEdgeInsets = UIEdgeInsets(top: -labelHeight-imageTitleSpace/2, left: 0, bottom: 0, right: -labelWidth)
  40. labelEdgeInsets = UIEdgeInsets(top: 0, left: -imageWidth!, bottom: -imageHeight!-imageTitleSpace/2, right: 0)
  41. break;
  42. case .Left:
  43. imageEdgeInsets = UIEdgeInsets(top: 0, left: -imageTitleSpace/2, bottom: 0, right: imageTitleSpace)
  44. labelEdgeInsets = UIEdgeInsets(top: 0, left: imageTitleSpace/2, bottom: 0, right: -imageTitleSpace/2)
  45. break;
  46. case .Bottom:
  47. imageEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: -labelHeight!-imageTitleSpace/2, right: -labelWidth)
  48. labelEdgeInsets = UIEdgeInsets(top: -imageHeight!-imageTitleSpace/2, left: -imageWidth!, bottom: 0, right: 0)
  49. break;
  50. case .Right:
  51. imageEdgeInsets = UIEdgeInsets(top: 0, left: labelWidth+imageTitleSpace/2, bottom: 0, right: -labelWidth-imageTitleSpace/2)
  52. labelEdgeInsets = UIEdgeInsets(top: 0, left: -imageWidth!-imageTitleSpace/2, bottom: 0, right: imageWidth!+imageTitleSpace/2)
  53. break;
  54. }
  55. self.titleEdgeInsets = labelEdgeInsets
  56. self.imageEdgeInsets = imageEdgeInsets
  57. }
  58. }