#import "TGLocationTitleView.h" #import "TGFont.h" @interface TGLocationTitleView () { UILabel *_titleLabel; UILabel *_addressLabel; } @end @implementation TGLocationTitleView - (instancetype)initWithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self != nil) { _titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 5, frame.size.width, 20)]; _titleLabel.backgroundColor = [UIColor clearColor]; _titleLabel.font = TGBoldSystemFontOfSize(17); _titleLabel.textColor = [UIColor blackColor]; _titleLabel.textAlignment = NSTextAlignmentCenter; [self addSubview:_titleLabel]; _addressLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 21, frame.size.width, 21)]; _addressLabel.backgroundColor = [UIColor clearColor]; _addressLabel.font = TGSystemFontOfSize(13.0f); _addressLabel.textColor = UIColorRGB(0x787878); _addressLabel.textAlignment = NSTextAlignmentCenter; [self addSubview:_addressLabel]; } return self; } - (NSString *)title { return _titleLabel.text; } - (void)setTitle:(NSString *)title { _titleLabel.text = title; [self setNeedsLayout]; } - (NSString *)address { return _addressLabel.text; } - (void)setAddress:(NSString *)address { _addressLabel.text = address; [self setNeedsLayout]; } - (UIView *)_findNavigationBar:(UIView *)view { if (view.superview == nil) return nil; else if ([view.superview isKindOfClass:[UINavigationBar class]]) return view.superview; else return [self _findNavigationBar:view.superview]; } - (void)layoutSubviews { [super layoutSubviews]; [_titleLabel sizeToFit]; [_addressLabel sizeToFit]; CGRect titleFrame = _titleLabel.frame; titleFrame.size.width = CGCeil(titleFrame.size.width); CGRect addressFrame = _addressLabel.frame; addressFrame.size.width = CGCeil(addressFrame.size.width); UIView *navigationBar = [self _findNavigationBar:self]; CGRect offsetRect = [self.superview convertRect:self.frame toView:navigationBar]; UIEdgeInsets edges = UIEdgeInsetsMake(0, self.backButtonWidth, 0, navigationBar.frame.size.width - self.actionsButtonWidth); if (UIInterfaceOrientationIsPortrait(self.interfaceOrientation)) { if (_addressLabel.text.length > 0) titleFrame.origin.y = 5; else titleFrame.origin.y = 12; addressFrame.origin.y = 23.5f; titleFrame.origin.x = (navigationBar.frame.size.width - titleFrame.size.width) / 2; if (titleFrame.origin.x < edges.left || CGRectGetMaxX(titleFrame) > edges.right) { titleFrame.origin.x = edges.left; titleFrame.size.width = edges.right - edges.left; } CGFloat titleCenter = CGRectGetMidX(titleFrame); addressFrame.origin.x = titleCenter - addressFrame.size.width / 2; if (addressFrame.origin.x < edges.left || CGRectGetMaxX(addressFrame) > edges.right) { addressFrame.origin.x = edges.left; addressFrame.size.width = edges.right - edges.left; } } else { titleFrame.origin.y = 10; addressFrame.origin.y = 13; CGFloat jointWidth = titleFrame.size.width + addressFrame.size.width + 6; CGFloat jointOrigin = (navigationBar.frame.size.width - jointWidth) / 2; if (jointOrigin < edges.left || jointOrigin + jointWidth > edges.right) { jointOrigin = edges.left; CGFloat newJointWidth = edges.right - edges.left; addressFrame.size.width -= (jointWidth - newJointWidth); jointWidth = newJointWidth; } titleFrame.origin.x = jointOrigin; addressFrame.origin.x = jointOrigin + jointWidth - addressFrame.size.width; } _titleLabel.frame = CGRectOffset(titleFrame, -offsetRect.origin.x, 0); _addressLabel.frame = CGRectOffset(addressFrame, -offsetRect.origin.x, 0); } @end