UIButton+Extension.m 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. //
  2. // UIButton+Extension.m
  3. // HuaKaiChat
  4. //
  5. // Created by BigBiao on 2017/8/24.
  6. // Copyright © 2017年 huakai. All rights reserved.
  7. //
  8. #import "UIButton+Extension.h"
  9. @implementation UIButton (Extension)
  10. - (void)layoutButtonWithEdgeInsetsStyle:(MKButtonEdgeInsetsStyle)style
  11. imageTitleSpace:(CGFloat)space
  12. {
  13. // self.backgroundColor = [UIColor cyanColor];
  14. /**
  15. * 前置知识点:titleEdgeInsets是title相对于其上下左右的inset,跟tableView的contentInset是类似的,
  16. * 如果只有title,那它上下左右都是相对于button的,image也是一样;
  17. * 如果同时有image和label,那这时候image的上左下是相对于button,右边是相对于label的;title的上右下是相对于button,左边是相对于image的。
  18. */
  19. // 1. 得到imageView和titleLabel的宽、高
  20. CGFloat imageWith = self.imageView.frame.size.width;
  21. CGFloat imageHeight = self.imageView.frame.size.height;
  22. CGFloat labelWidth = 0.0;
  23. CGFloat labelHeight = 0.0;
  24. if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0) {
  25. // 由于iOS8中titleLabel的size为0,用下面的这种设置
  26. labelWidth = self.titleLabel.intrinsicContentSize.width;
  27. labelHeight = self.titleLabel.intrinsicContentSize.height;
  28. } else {
  29. labelWidth = self.titleLabel.frame.size.width;
  30. labelHeight = self.titleLabel.frame.size.height;
  31. }
  32. // 2. 声明全局的imageEdgeInsets和labelEdgeInsets
  33. UIEdgeInsets imageEdgeInsets = UIEdgeInsetsZero;
  34. UIEdgeInsets labelEdgeInsets = UIEdgeInsetsZero;
  35. // 3. 根据style和space得到imageEdgeInsets和labelEdgeInsets的值
  36. switch (style) {
  37. case MKButtonEdgeInsetsStyleTop:
  38. {
  39. imageEdgeInsets = UIEdgeInsetsMake(-labelHeight-space/2.0, 0, 0, -labelWidth);
  40. labelEdgeInsets = UIEdgeInsetsMake(0, -imageWith, -imageHeight-space/2.0, 0);
  41. }
  42. break;
  43. case MKButtonEdgeInsetsStyleLeft:
  44. {
  45. imageEdgeInsets = UIEdgeInsetsMake(0, -space/2.0, 0, space/2.0);
  46. labelEdgeInsets = UIEdgeInsetsMake(0, space/2.0, 0, -space/2.0);
  47. }
  48. break;
  49. case MKButtonEdgeInsetsStyleBottom:
  50. {
  51. imageEdgeInsets = UIEdgeInsetsMake(0, 0, -labelHeight-space/2.0, -labelWidth);
  52. labelEdgeInsets = UIEdgeInsetsMake(-imageHeight-space/2.0, -imageWith, 0, 0);
  53. }
  54. break;
  55. case MKButtonEdgeInsetsStyleRight:
  56. {
  57. imageEdgeInsets = UIEdgeInsetsMake(0, labelWidth+space/2.0, 0, -labelWidth-space/2.0);
  58. labelEdgeInsets = UIEdgeInsetsMake(0, -imageWith-space/2.0, 0, imageWith+space/2.0);
  59. }
  60. break;
  61. default:
  62. break;
  63. }
  64. // 4. 赋值
  65. self.titleEdgeInsets = labelEdgeInsets;
  66. self.imageEdgeInsets = imageEdgeInsets;
  67. }
  68. @end