UIView+RAConstraint.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. //
  2. // UIView+JKConstraint.h
  3. // Constraint
  4. //
  5. // Created by Jack on 2018/12/10.
  6. // Copyright © 2018年 Jack Template. All rights reserved.
  7. //
  8. #import <UIKit/UIKit.h>
  9. @interface RAConstraint : NSObject
  10. @property (nonatomic,readonly,copy) RAConstraint *(^ra_offset)(CGFloat offset);
  11. @property (nonatomic,readonly,copy) RAConstraint *(^ra_lessThanOrEqualTo)(RAConstraint *constraint);
  12. @property (nonatomic,readonly,copy) RAConstraint *(^ra_equalTo)(RAConstraint *constraint);
  13. @property (nonatomic,readonly,copy) RAConstraint *(^ra_greaterThanOrEqualTo)(RAConstraint *constraint);
  14. @property (nonatomic,readonly,copy) RAConstraint *(^ra_priority)(UILayoutPriority priority);
  15. @property (nonatomic,readonly,copy) RAConstraint *(^ra_append)(NSString *identifier);
  16. @property (nonatomic,copy) RAConstraint *(^ra_size_greaterThanOrEqualTo)(CGFloat size);
  17. @property (nonatomic,copy) RAConstraint *(^ra_size_lessThanOrEqualTo)(CGFloat size);
  18. @property (nonatomic,readonly,copy) void (^ra_modify)(CGFloat constant);
  19. @end
  20. #pragma mark - Maker
  21. @interface RAConstraintMaker : NSObject
  22. @property (nonatomic,strong,readonly) RAConstraint *left;
  23. @property (nonatomic,strong,readonly) RAConstraint *top;
  24. @property (nonatomic,strong,readonly) RAConstraint *right;
  25. @property (nonatomic,strong,readonly) RAConstraint *bottom;
  26. @property (nonatomic,strong,readonly) RAConstraint *centerX;
  27. @property (nonatomic,strong,readonly) RAConstraint *centerY;
  28. @property (nonatomic,strong,readonly) RAConstraint *baseLine;
  29. @property (nonatomic,strong,readonly) RAConstraint *width;
  30. @property (nonatomic,strong,readonly) RAConstraint *height;
  31. @property (nonatomic,strong,readonly) RAConstraint *ra_safeAreaLeft API_AVAILABLE(ios(11.0),tvos(11.0));
  32. @property (nonatomic,strong,readonly) RAConstraint *ra_safeAreaTop API_AVAILABLE(ios(11.0),tvos(11.0));
  33. @property (nonatomic,strong,readonly) RAConstraint *ra_safeAreaRight API_AVAILABLE(ios(11.0),tvos(11.0));
  34. @property (nonatomic,strong,readonly) RAConstraint *ra_safeAreaBottom API_AVAILABLE(ios(11.0),tvos(11.0));
  35. // 抗拉伸
  36. @property (nonatomic,assign) UILayoutPriority ra_horizontalHuggingPriority;
  37. @property (nonatomic,assign) UILayoutPriority ra_verticalHuggingPriority;
  38. // 抗压缩
  39. @property (nonatomic,assign) UILayoutPriority ra_horizontalCompressionResistancePriority;
  40. @property (nonatomic,assign) UILayoutPriority ra_verticalCompressionResistancePriority;
  41. @end
  42. #pragma mark - UIView
  43. @interface UIView (RAConstraint)
  44. @property (nonatomic,strong,readonly) RAConstraint *left;
  45. @property (nonatomic,strong,readonly) RAConstraint *top;
  46. @property (nonatomic,strong,readonly) RAConstraint *right;
  47. @property (nonatomic,strong,readonly) RAConstraint *bottom;
  48. @property (nonatomic,strong,readonly) RAConstraint *centerX;
  49. @property (nonatomic,strong,readonly) RAConstraint *centerY;
  50. @property (nonatomic,strong,readonly) RAConstraint *baseLine;
  51. @property (nonatomic,strong,readonly) RAConstraint *width;
  52. @property (nonatomic,strong,readonly) RAConstraint *height;
  53. @property (nonatomic,strong,readonly) RAConstraint *ra_safeAreaLeft API_AVAILABLE(ios(11.0),tvos(11.0));
  54. @property (nonatomic,strong,readonly) RAConstraint *ra_safeAreaTop API_AVAILABLE(ios(11.0),tvos(11.0));
  55. @property (nonatomic,strong,readonly) RAConstraint *ra_safeAreaRight API_AVAILABLE(ios(11.0),tvos(11.0));
  56. @property (nonatomic,strong,readonly) RAConstraint *ra_safeAreaBottom API_AVAILABLE(ios(11.0),tvos(11.0));
  57. @property (nonatomic,copy,readonly) void (^ra_modifyConstraint)(NSString *identifier, CGFloat constant);
  58. - (void)ra_applyConstraints:(void(^)(RAConstraintMaker *maker))apply;
  59. /**
  60. * it will remove all of its constraints before installing them again.
  61. */
  62. - (void)ra_remakeConstraints:(void(^)(RAConstraintMaker *maker))remake;
  63. @end
  64. #pragma mark - View Controller
  65. @interface UIViewController (RAConstraint)
  66. @property (nonatomic,strong,readonly) RAConstraint *ra_topLayoutGuid;
  67. @property (nonatomic,strong,readonly) RAConstraint *ra_topLayoutGuidTop;
  68. @property (nonatomic,strong,readonly) RAConstraint *ra_topLayoutGuidBottom;
  69. @property (nonatomic,strong,readonly) RAConstraint *ra_bottomLayoutGuid;
  70. @property (nonatomic,strong,readonly) RAConstraint *ra_bottomLayoutGuidTop;
  71. @property (nonatomic,strong,readonly) RAConstraint *ra_bottomLayoutGuidBottom;
  72. @end