Skip to content

Commit 643be7e

Browse files
committed
Issue ResearchKit#118: Adjust fitness quantity pair layout
This fixes a regression in quantity pair layout. The left view of the quantity pair, the distance view, formerly always contained content, which fixed the vertical height of the view. At some point that content was no longer set, handling the no-pedometer-distance case. The primary fix here is to ensure that a title and zero quantity are present in the distance view, even if distance is not available (as in the simulator). Secondary fixes fix constraints to make them static, since they do not need to be dynamically updated. We also introduce new baseline constraints to better enforce alignment between the left and right views. Tested distance-only, heart-rate-only, both, and neither visible on iPhone 6 on iOS 8.3. Tested with and without a value for heart rate, with both visible.
1 parent 31ea790 commit 643be7e

File tree

2 files changed

+41
-30
lines changed

2 files changed

+41
-30
lines changed

ResearchKit/ActiveTasks/ORKActiveStepQuantityView.m

Lines changed: 35 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ @implementation ORKActiveStepQuantityView {
5050
ORKQuantityLabel *_valueLabel;
5151
ORKTintedImageView *_imageView;
5252
UIView *_valueHolder;
53+
54+
NSLayoutConstraint *_zeroWidthConstraint;
5355
}
5456

5557
- (instancetype)initWithFrame:(CGRect)frame {
@@ -82,6 +84,7 @@ - (instancetype)initWithFrame:(CGRect)frame {
8284
view.isAccessibilityElement = NO;
8385
}
8486

87+
[self setupConstraints];
8588
[self setNeedsUpdateConstraints];
8689
}
8790
return self;
@@ -108,19 +111,13 @@ - (void)setImage:(UIImage *)image {
108111
_imageView.image = image;
109112
}
110113

111-
- (void)updateConstraints {
112-
[self removeConstraints:[self constraints]];
114+
- (void)setupConstraints {
113115

114116
const CGFloat TitleBaselineToValueBaseline = 40;
115117
const CGFloat ValueBaselineToBottom = 36;
116118

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);
123119
NSMutableArray *additionalConstraints = [NSMutableArray array];
120+
NSDictionary *views = NSDictionaryOfVariableBindings(_titleLabel, _valueLabel, _imageView);
124121
[additionalConstraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_titleLabel]"
125122
options:0
126123
metrics:nil
@@ -176,10 +173,20 @@ - (void)updateConstraints {
176173
attribute:NSLayoutAttributeRight
177174
multiplier:1 constant:0]];
178175
for (NSLayoutConstraint *constraint in additionalConstraints) {
179-
constraint.priority = UILayoutPriorityDefaultHigh;
176+
constraint.priority = UILayoutPriorityRequired-2;
180177
}
181-
[self addConstraints:additionalConstraints];
182178

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;
183190
[super updateConstraints];
184191
}
185192

@@ -206,7 +213,6 @@ - (UIAccessibilityTraits)accessibilityTraits {
206213

207214
@implementation ORKQuantityPairView {
208215
UIView *_metricKeyline;
209-
NSArray *_constraints;
210216
}
211217

212218
- (instancetype)initWithFrame:(CGRect)frame {
@@ -226,16 +232,13 @@ - (instancetype)initWithFrame:(CGRect)frame {
226232
[self addSubview:_leftView];
227233
[self addSubview:_rightView];
228234
[self addSubview:_metricKeyline];
229-
[self setNeedsUpdateConstraints];
235+
[self setupConstraints];
230236
}
231237
return self;
232238
}
233239

234-
- (void)updateConstraints {
235-
if (_constraints) {
236-
[self removeConstraints:_constraints];
237-
_constraints = nil;
238-
}
240+
- (void)setupConstraints {
241+
239242
NSMutableArray *constraints = [NSMutableArray array];
240243
NSDictionary *views = NSDictionaryOfVariableBindings(_leftView, _rightView, _metricKeyline);
241244

@@ -255,6 +258,20 @@ - (void)updateConstraints {
255258
}
256259
[constraints addObjectsFromArray:horizConstraints];
257260

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+
258275
[constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:[_leftView][_metricKeyline(==s)]"
259276
options:NSLayoutFormatAlignAllTop|NSLayoutFormatDirectionLeftToRight
260277
metrics:@{@"s":@(1/scale)}
@@ -289,9 +306,7 @@ - (void)updateConstraints {
289306
equalWidthConstraint.priority = UILayoutPriorityDefaultLow;
290307
[constraints addObject:equalWidthConstraint];
291308

292-
[self addConstraints:constraints];
293-
_constraints = constraints;
294-
[super updateConstraints];
309+
[NSLayoutConstraint activateConstraints:constraints];
295310
}
296311

297312
- (void)setKeylineHidden:(BOOL)keylineHidden {

ResearchKit/ActiveTasks/ORKFitnessContentView.m

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -106,11 +106,14 @@ - (instancetype)initWithFrame:(CGRect)frame {
106106
self.backgroundColor = [[UIColor redColor] colorWithAlphaComponent:0.2];
107107
_quantityPairView.backgroundColor = [[UIColor orangeColor] colorWithAlphaComponent:0.2];
108108
#endif
109-
109+
110+
[self setDistanceInMeters:0];
111+
[self heartRateView].title = ORKLocalizedString(@"FITNESS_HEARTRATE_TITLE", nil);
112+
110113
[self addSubview:_quantityPairView];
111114
[self addSubview:_imageView];
112115
[self addSubview:_timerLabel];
113-
[self setNeedsUpdateConstraints];
116+
[self setupConstraints];
114117

115118
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(localeDidChange:) name:NSCurrentLocaleDidChangeNotification object:nil];
116119

@@ -147,11 +150,7 @@ - (void)updateConstraintConstants {
147150
_topConstraint.constant = (CaptionBaselineToTimerTop - CaptionBaselineToStepViewTop);
148151
}
149152

150-
- (void)updateConstraints {
151-
if (_constraints) {
152-
[self removeConstraints:_constraints];
153-
_constraints = nil;
154-
}
153+
- (void)setupConstraints {
155154
NSMutableArray *constraints = [NSMutableArray array];
156155
NSDictionary *views = NSDictionaryOfVariableBindings(_timerLabel, _imageView, _quantityPairView, _imageSpacer1, _imageSpacer2);
157156
[constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[_timerLabel][_imageSpacer1(>=0)][_imageView]"
@@ -239,8 +238,6 @@ - (void)updateConstraints {
239238
[constraints addObject:maxWidthConstraint];
240239

241240
[self addConstraints:constraints];
242-
_constraints = constraints;
243-
[super updateConstraints];
244241
}
245242

246243
- (void)setImage:(UIImage *)image {
@@ -277,7 +274,6 @@ - (void)setHasHeartRate:(BOOL)hasHeartRate {
277274
- (void)setHeartRate:(NSString *)heartRate {
278275
_heartRate = heartRate;
279276
[self heartRateView].value = heartRate;
280-
[self heartRateView].title = ORKLocalizedString(@"FITNESS_HEARTRATE_TITLE", nil);
281277
}
282278

283279
- (void)updateKeylineVisible {

0 commit comments

Comments
 (0)