Skip to content

Commit

Permalink
Fixes pull to refresh layout to centre the view and align labels depe…
Browse files Browse the repository at this point in the history
…nding of their font and text.
  • Loading branch information
smorel committed Mar 4, 2013
1 parent b50de8e commit 6649c50
Showing 1 changed file with 40 additions and 18 deletions.
58 changes: 40 additions & 18 deletions SVPullToRefresh/UIScrollView+SVPullToRefresh.m
Original file line number Diff line number Diff line change
Expand Up @@ -161,23 +161,51 @@ - (void)willMoveToSuperview:(UIView *)newSuperview {
}

- (void)layoutSubviews {
CGFloat remainingWidth = self.superview.bounds.size.width-200;
float position = 0.50;
CGFloat leftViewWidth = MAX(self.arrow.bounds.size.width,self.activityIndicatorView.bounds.size.width);

CGRect titleFrame = self.titleLabel.frame;
titleFrame.origin.x = ceil(remainingWidth*position+44);
self.titleLabel.frame = titleFrame;
CGFloat margin = 10;
CGFloat labelMaxWidth = self.bounds.size.width - margin - leftViewWidth;

CGRect dateFrame = self.subtitleLabel.frame;
dateFrame.origin.x = titleFrame.origin.x;
self.subtitleLabel.frame = dateFrame;
self.titleLabel.text = [self.titles objectAtIndex:self.state];

CGRect arrowFrame = self.arrow.frame;
arrowFrame.origin.x = ceil(remainingWidth*position);
self.arrow.frame = arrowFrame;

NSString *subtitle = [self.subtitles objectAtIndex:self.state];
self.subtitleLabel.text = subtitle.length > 0 ? subtitle : nil;


CGSize titleSize = [self.titleLabel.text sizeWithFont:self.titleLabel.font
constrainedToSize:CGSizeMake(labelMaxWidth,self.titleLabel.font.lineHeight)
lineBreakMode:self.titleLabel.lineBreakMode];


CGSize subtitleSize = [self.subtitleLabel.text sizeWithFont:self.subtitleLabel.font
constrainedToSize:CGSizeMake(labelMaxWidth,self.subtitleLabel.font.lineHeight)
lineBreakMode:self.subtitleLabel.lineBreakMode];

CGFloat maxLabelWidth = MAX(titleSize.width,subtitleSize.width);
CGFloat totalMaxWidth = leftViewWidth + margin + maxLabelWidth;
CGFloat labelX = (self.bounds.size.width / 2) - (totalMaxWidth / 2) + leftViewWidth + margin;

if(subtitleSize.height > 0){
CGFloat totalHeigth = titleSize.height + subtitleSize.height + margin;
CGFloat minY = (self.bounds.size.height / 2) - (totalHeigth / 2);

CGFloat titleY = minY;
self.titleLabel.frame = CGRectIntegral(CGRectMake(labelX,titleY,titleSize.width,titleSize.height));
self.subtitleLabel.frame = CGRectIntegral(CGRectMake(labelX,titleY + titleSize.height + margin,subtitleSize.width,subtitleSize.height));
}else{
CGFloat totalHeigth = titleSize.height;
CGFloat minY = (self.bounds.size.height / 2) - (totalHeigth / 2);

CGFloat titleY = minY;
self.titleLabel.frame = CGRectIntegral(CGRectMake(labelX,titleY,titleSize.width,titleSize.height));
self.subtitleLabel.frame = CGRectIntegral(CGRectMake(labelX,titleY + titleSize.height + margin,subtitleSize.width,subtitleSize.height));
}

CGFloat arrowX = (self.bounds.size.width / 2) - (totalMaxWidth / 2) + (leftViewWidth - self.arrow.bounds.size.width) / 2;
self.arrow.frame = CGRectIntegral(CGRectMake(arrowX,(self.bounds.size.height / 2) - (self.arrow.bounds.size.height / 2),self.arrow.bounds.size.width,self.arrow.bounds.size.height));
self.activityIndicatorView.center = self.arrow.center;


for(id otherView in self.viewForState) {
if([otherView isKindOfClass:[UIView class]])
[otherView removeFromSuperview];
Expand All @@ -197,12 +225,6 @@ - (void)layoutSubviews {
[customView setFrame:CGRectMake(origin.x, origin.y, viewBounds.size.width, viewBounds.size.height)];
}
else {
self.titleLabel.text = [self.titles objectAtIndex:self.state];

NSString *subtitle = [self.subtitles objectAtIndex:self.state];
if(subtitle.length > 0)
self.subtitleLabel.text = subtitle;

switch (self.state) {
case SVPullToRefreshStateStopped:
self.arrow.alpha = 1;
Expand Down

0 comments on commit 6649c50

Please sign in to comment.