@@ -50,6 +50,8 @@ @implementation ORKActiveStepQuantityView {
50
50
ORKQuantityLabel *_valueLabel;
51
51
ORKTintedImageView *_imageView;
52
52
UIView *_valueHolder;
53
+
54
+ NSLayoutConstraint *_zeroWidthConstraint;
53
55
}
54
56
55
57
- (instancetype )initWithFrame : (CGRect)frame {
@@ -82,6 +84,7 @@ - (instancetype)initWithFrame:(CGRect)frame {
82
84
view.isAccessibilityElement = NO ;
83
85
}
84
86
87
+ [self setupConstraints ];
85
88
[self setNeedsUpdateConstraints ];
86
89
}
87
90
return self;
@@ -108,19 +111,13 @@ - (void)setImage:(UIImage *)image {
108
111
_imageView.image = image;
109
112
}
110
113
111
- - (void )updateConstraints {
112
- [self removeConstraints: [self constraints ]];
114
+ - (void )setupConstraints {
113
115
114
116
const CGFloat TitleBaselineToValueBaseline = 40 ;
115
117
const CGFloat ValueBaselineToBottom = 36 ;
116
118
117
- if (! _enabled) {
118
- NSLayoutConstraint *zeroWidthConstraint = [NSLayoutConstraint constraintWithItem: self attribute: NSLayoutAttributeWidth relatedBy: NSLayoutRelationEqual toItem: nil attribute: NSLayoutAttributeNotAnAttribute multiplier: 1 constant: 0 ];
119
- zeroWidthConstraint.priority = UILayoutPriorityRequired-1 ;
120
- [self addConstraint: zeroWidthConstraint];
121
- }
122
- NSDictionary *views = NSDictionaryOfVariableBindings(_titleLabel, _valueLabel, _imageView);
123
119
NSMutableArray *additionalConstraints = [NSMutableArray array ];
120
+ NSDictionary *views = NSDictionaryOfVariableBindings(_titleLabel, _valueLabel, _imageView);
124
121
[additionalConstraints addObjectsFromArray: [NSLayoutConstraint constraintsWithVisualFormat: @" V:|[_titleLabel]"
125
122
options: 0
126
123
metrics: nil
@@ -176,10 +173,20 @@ - (void)updateConstraints {
176
173
attribute: NSLayoutAttributeRight
177
174
multiplier: 1 constant: 0 ]];
178
175
for (NSLayoutConstraint *constraint in additionalConstraints) {
179
- constraint.priority = UILayoutPriorityDefaultHigh ;
176
+ constraint.priority = UILayoutPriorityRequired- 2 ;
180
177
}
181
- [self addConstraints: additionalConstraints];
182
178
179
+ [NSLayoutConstraint activateConstraints: additionalConstraints];
180
+
181
+
182
+ NSLayoutConstraint *zeroWidthConstraint = [NSLayoutConstraint constraintWithItem: self attribute: NSLayoutAttributeWidth relatedBy: NSLayoutRelationEqual toItem: nil attribute: NSLayoutAttributeNotAnAttribute multiplier: 1 constant: 0 ];
183
+ zeroWidthConstraint.priority = UILayoutPriorityRequired-1 ;
184
+ _zeroWidthConstraint = zeroWidthConstraint;
185
+ _zeroWidthConstraint.active = !_enabled;
186
+ }
187
+
188
+ - (void )updateConstraints {
189
+ _zeroWidthConstraint.active = !_enabled;
183
190
[super updateConstraints ];
184
191
}
185
192
@@ -206,7 +213,6 @@ - (UIAccessibilityTraits)accessibilityTraits {
206
213
207
214
@implementation ORKQuantityPairView {
208
215
UIView *_metricKeyline;
209
- NSArray *_constraints;
210
216
}
211
217
212
218
- (instancetype )initWithFrame : (CGRect)frame {
@@ -226,16 +232,13 @@ - (instancetype)initWithFrame:(CGRect)frame {
226
232
[self addSubview: _leftView];
227
233
[self addSubview: _rightView];
228
234
[self addSubview: _metricKeyline];
229
- [self setNeedsUpdateConstraints ];
235
+ [self setupConstraints ];
230
236
}
231
237
return self;
232
238
}
233
239
234
- - (void )updateConstraints {
235
- if (_constraints) {
236
- [self removeConstraints: _constraints];
237
- _constraints = nil ;
238
- }
240
+ - (void )setupConstraints {
241
+
239
242
NSMutableArray *constraints = [NSMutableArray array ];
240
243
NSDictionary *views = NSDictionaryOfVariableBindings(_leftView, _rightView, _metricKeyline);
241
244
@@ -255,6 +258,20 @@ - (void)updateConstraints {
255
258
}
256
259
[constraints addObjectsFromArray: horizConstraints];
257
260
261
+ // Ensure baseline alignment of title and value
262
+ [constraints addObject: [NSLayoutConstraint constraintWithItem: _leftView.titleLabel
263
+ attribute: NSLayoutAttributeFirstBaseline
264
+ relatedBy: NSLayoutRelationEqual
265
+ toItem: _rightView.titleLabel
266
+ attribute: NSLayoutAttributeFirstBaseline
267
+ multiplier: 1 constant: 0 ]];
268
+ [constraints addObject: [NSLayoutConstraint constraintWithItem: _leftView.valueLabel
269
+ attribute: NSLayoutAttributeFirstBaseline
270
+ relatedBy: NSLayoutRelationEqual
271
+ toItem: _rightView.valueLabel
272
+ attribute: NSLayoutAttributeFirstBaseline
273
+ multiplier: 1 constant: 0 ]];
274
+
258
275
[constraints addObjectsFromArray: [NSLayoutConstraint constraintsWithVisualFormat: @" H:[_leftView][_metricKeyline(==s)]"
259
276
options: NSLayoutFormatAlignAllTop|NSLayoutFormatDirectionLeftToRight
260
277
metrics: @{@" s" :@(1 /scale)}
@@ -289,9 +306,7 @@ - (void)updateConstraints {
289
306
equalWidthConstraint.priority = UILayoutPriorityDefaultLow;
290
307
[constraints addObject: equalWidthConstraint];
291
308
292
- [self addConstraints: constraints];
293
- _constraints = constraints;
294
- [super updateConstraints ];
309
+ [NSLayoutConstraint activateConstraints: constraints];
295
310
}
296
311
297
312
- (void )setKeylineHidden : (BOOL )keylineHidden {
0 commit comments