NSLayoutConstraint+PKDownloadButton.m 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #import "NSLayoutConstraint+PKDownloadButton.h"
  2. @implementation NSLayoutConstraint (PKDownloadButton)
  3. + (NSArray *)constraintsForWrappedSubview:(UIView *)view withInsets:(UIEdgeInsets)insets {
  4. NSArray *horizontalConstraints = [self horizontalConstraintsForWrappedSubview:view withInsets:insets];
  5. NSArray *verticalConstraints = [self verticalConstraintsForWrappedSubview:view withInsets:insets];
  6. NSMutableArray *resultArray = [NSMutableArray arrayWithCapacity:[horizontalConstraints count] + [verticalConstraints count]];
  7. [resultArray addObjectsFromArray:horizontalConstraints];
  8. [resultArray addObjectsFromArray:verticalConstraints];
  9. return resultArray;
  10. }
  11. + (NSArray *)horizontalConstraintsForWrappedSubview:(UIView *)view withInsets:(UIEdgeInsets)insets {
  12. NSString *horizontalConstraintsFormat = [NSString stringWithFormat:@"H:|-(%d)-[view]-(%d)-|",
  13. (int)insets.left,
  14. (int)roundf(insets.right)];
  15. NSArray *horizontalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:horizontalConstraintsFormat
  16. options:0
  17. metrics:nil
  18. views:NSDictionaryOfVariableBindings(view)];
  19. return horizontalConstraints;
  20. }
  21. + (NSArray *)verticalConstraintsForWrappedSubview:(UIView *)view withInsets:(UIEdgeInsets)insets {
  22. NSString *verticalConstraintsFormat = [NSString stringWithFormat:@"V:|-(%d)-[view]-(%d)-|", (int)insets.top, (int)insets.bottom];
  23. NSArray *verticalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:verticalConstraintsFormat
  24. options:0
  25. metrics:nil
  26. views:NSDictionaryOfVariableBindings(view)];
  27. return verticalConstraints;
  28. }
  29. + (NSLayoutConstraint *)constraintForView:(UIView *)view withWidth:(CGFloat)width {
  30. return [NSLayoutConstraint constraintWithItem:view
  31. attribute:NSLayoutAttributeWidth
  32. relatedBy:NSLayoutRelationEqual
  33. toItem:nil
  34. attribute:NSLayoutAttributeNotAnAttribute
  35. multiplier:1.0
  36. constant:width];
  37. }
  38. + (NSLayoutConstraint *)constraintForView:(UIView *)view withHeight:(CGFloat)height {
  39. return [NSLayoutConstraint constraintWithItem:view
  40. attribute:NSLayoutAttributeHeight
  41. relatedBy:NSLayoutRelationEqual
  42. toItem:nil
  43. attribute:NSLayoutAttributeNotAnAttribute
  44. multiplier:1.0
  45. constant:height];
  46. }
  47. + (NSArray *)constraintsForView:(UIView *)view withSize:(CGSize)size {
  48. NSLayoutConstraint *width = [NSLayoutConstraint constraintForView:view
  49. withWidth:size.width];
  50. NSLayoutConstraint *height = [NSLayoutConstraint constraintForView:view
  51. withHeight:size.height];
  52. return @[width, height];
  53. }
  54. + (NSArray *)constraintsWithVisualFormat:(NSString *)format views:(NSDictionary *)views {
  55. return [self constraintsWithVisualFormat:format options:0 metrics:nil views:views];
  56. }
  57. + (NSLayoutConstraint *)constraintForCenterByXView:(UIView *)overlay withView:(UIView *)view {
  58. return [NSLayoutConstraint constraintWithItem:overlay
  59. attribute:NSLayoutAttributeCenterX
  60. relatedBy:NSLayoutRelationEqual
  61. toItem:view
  62. attribute:NSLayoutAttributeCenterX
  63. multiplier:1.0
  64. constant:0.0];
  65. }
  66. + (NSLayoutConstraint *)constraintForCenterByYView:(UIView *)overlay withView:(UIView *)view {
  67. return [NSLayoutConstraint constraintWithItem:overlay
  68. attribute:NSLayoutAttributeCenterY
  69. relatedBy:NSLayoutRelationEqual
  70. toItem:view
  71. attribute:NSLayoutAttributeCenterY
  72. multiplier:1.0
  73. constant:0.0];
  74. }
  75. + (NSArray *)constraintsForCenterView:(UIView *)overlay {
  76. return [self constraintsForCenterView:overlay withView:overlay.superview];
  77. }
  78. + (NSArray *)constraintsForCenterView:(UIView *)overlay withView:(UIView *)view {
  79. NSMutableArray *constraints = [NSMutableArray array];
  80. [constraints addObject:[self constraintForCenterByXView:overlay withView:view]];
  81. [constraints addObject:[self constraintForCenterByYView:overlay withView:view]];
  82. return constraints;
  83. }
  84. @end