BTUIKSwitchFormField.m 4.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #import "BTUIKSwitchFormField.h"
  2. #import "BTUIKViewUtil.h"
  3. #import "BTUIKAppearance.h"
  4. @interface BTUIKSwitchFormField ()
  5. @property (nonatomic, strong) UILabel *formLabel;
  6. @property (nonatomic, strong) NSMutableArray *layoutConstraints;
  7. @end
  8. @implementation BTUIKSwitchFormField
  9. - (instancetype)initWithTitle:(NSString *)title {
  10. self = [super initWithFrame:CGRectZero];
  11. if (self) {
  12. self.opaque = NO;
  13. self.backgroundColor = UIColor.clearColor;
  14. self.translatesAutoresizingMaskIntoConstraints = NO;
  15. _switchControl = [[UISwitch alloc] init];
  16. _switchControl.translatesAutoresizingMaskIntoConstraints = NO;
  17. _switchControl.accessibilityLabel = title;
  18. _switchControl.tintColor = [BTUIKAppearance sharedInstance].tintColor;
  19. _switchControl.onTintColor = [BTUIKAppearance sharedInstance].switchOnTintColor;
  20. _switchControl.thumbTintColor = [BTUIKAppearance sharedInstance].switchThumbTintColor;
  21. [self addSubview:_switchControl];
  22. _formLabel = [[UILabel alloc] init];
  23. [BTUIKAppearance styleLabelBoldPrimary:_formLabel];
  24. _formLabel.translatesAutoresizingMaskIntoConstraints = NO;
  25. _formLabel.text = title;
  26. [self addSubview:_formLabel];
  27. [_formLabel setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal];
  28. [_formLabel setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisHorizontal];
  29. [self setContentHuggingPriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];
  30. [self updateConstraints];
  31. }
  32. return self;
  33. }
  34. - (void)updateConstraints {
  35. if (self.layoutConstraints != nil) {
  36. [self removeConstraints:self.layoutConstraints];
  37. }
  38. self.layoutConstraints = [NSMutableArray array];
  39. NSMutableDictionary *viewBindings = [@{@"view":self, @"switchControl":self.switchControl, @"formLabel": self.formLabel} mutableCopy];
  40. NSDictionary *metrics = @{@"PADDING":@15};
  41. BOOL hasFormLabel = (self.formLabel.text.length > 0);
  42. [self.layoutConstraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[switchControl]|"
  43. options:0
  44. metrics:metrics
  45. views:viewBindings]];
  46. [self.layoutConstraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[formLabel]|"
  47. options:0
  48. metrics:metrics
  49. views:viewBindings]];
  50. if (hasFormLabel) {
  51. [self.layoutConstraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[formLabel(<=0@1)]-(PADDING)-[switchControl]"
  52. options:0
  53. metrics:metrics
  54. views:viewBindings]];
  55. } else {
  56. [self.layoutConstraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(PADDING)-[switchControl]"
  57. options:0
  58. metrics:metrics
  59. views:viewBindings]];
  60. }
  61. [self.layoutConstraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[switchControl]-(PADDING)-|"
  62. options:0
  63. metrics:metrics
  64. views:viewBindings]];
  65. NSArray *contraintsToAdd = [self.layoutConstraints copy];
  66. [self addConstraints:contraintsToAdd];
  67. [super updateConstraints];
  68. }
  69. @end