Skip to content

Instantly share code, notes, and snippets.

@bobspryn
Created March 28, 2014 19:11
Show Gist options
  • Select an option

  • Save bobspryn/9840687 to your computer and use it in GitHub Desktop.

Select an option

Save bobspryn/9840687 to your computer and use it in GitHub Desktop.
//
// TCAnswerDetailTitleDetailCell.m
// Three Cents
//
// Created by Bob Spryn on 4/11/13.
// Copyright (c) 2013 Three Cents, Inc. All rights reserved.
//
#import "TCAnswerDetailTitleDetailCell.h"
static CGFloat const kTCLabelLeftPadding = 10;
static CGFloat const kTCLabelRightPadding = 10;
static CGFloat const kTCLabelTopPadding = 7;
static CGFloat const kTCLabelBottomPadding = 7;
static CGFloat const kTCLabelSpacing = 2;
#define mTCTitleLabelFont [UIFont fontWithDescriptor:[[UIFontDescriptor preferredAvenirNextFontDescriptorWithTextStyle:UIFontTextStyleCaption1] fontDescriptorWithSymbolicTraits:UIFontDescriptorTraitBold] size:0]
#define mTCDetailLabelFont [UIFont fontWithDescriptor:[UIFontDescriptor preferredAvenirNextFontDescriptorWithTextStyle:UIFontTextStyleCaption1] size:0]
@implementation TCAnswerDetailTitleDetailCell
- (id) initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
self.titleLabel.font = mTCTitleLabelFont;
self.detailLabel.font = mTCDetailLabelFont;
self.detailLabel.backgroundColor = self.titleLabel.backgroundColor = [UIColor clearColor];
self.titleLabel.numberOfLines = self.detailLabel.numberOfLines = 0;
self.titleLabel.lineBreakMode = self.detailLabel.lineBreakMode = NSLineBreakByWordWrapping;
[self.titleLabel setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];
[self.detailLabel setContentCompressionResistancePriority:UILayoutPriorityRequired forAxis:UILayoutConstraintAxisVertical];
[self setupConstraints];
}
return self;
}
- (void) setupConstraints {
[self.contentView addConstraints:[NSLayoutConstraint
constraintsWithVisualFormat:@"|-kTCLabelLeftPadding-[_titleLabel]"
options:0
metrics:@{@"kTCLabelLeftPadding": [NSNumber numberWithFloat:kTCLabelLeftPadding], @"kTCLabelRightPadding": [NSNumber numberWithFloat:kTCLabelRightPadding]}
views:NSDictionaryOfVariableBindings(_titleLabel)]];
[self.contentView addConstraints:[NSLayoutConstraint
constraintsWithVisualFormat:@"|-kTCLabelLeftPadding-[_detailLabel]"
options:0
metrics:@{@"kTCLabelLeftPadding": [NSNumber numberWithFloat:kTCLabelLeftPadding], @"kTCLabelRightPadding": [NSNumber numberWithFloat:kTCLabelRightPadding]}
views:NSDictionaryOfVariableBindings(_detailLabel)]];
[self.contentView addConstraints:[NSLayoutConstraint
constraintsWithVisualFormat:@"V:|-kTCLabelTopPadding-[_titleLabel]-kTCLabelSpacing-[_detailLabel]-kTCLabelBottomPadding-|"
options:0
metrics:@{@"kTCLabelTopPadding": [NSNumber numberWithFloat:kTCLabelTopPadding],
@"kTCLabelBottomPadding": [NSNumber numberWithFloat:kTCLabelBottomPadding],
@"kTCLabelSpacing": [NSNumber numberWithFloat:kTCLabelSpacing]
}
views:NSDictionaryOfVariableBindings(_titleLabel,_detailLabel)]];
}
- (UILabel *)titleLabel {
if (!_titleLabel) {
_titleLabel = [[UILabel alloc] init];
_titleLabel.translatesAutoresizingMaskIntoConstraints = NO;
[self.contentView addSubview:_titleLabel];
}
return _titleLabel;
}
- (UILabel *)detailLabel {
if (!_detailLabel) {
_detailLabel = [[UILabel alloc] init];
_detailLabel.translatesAutoresizingMaskIntoConstraints = NO;
[self.contentView addSubview:_detailLabel];
}
return _detailLabel;
}
- (void) layoutSubviews {
self.titleLabel.preferredMaxLayoutWidth = self.detailLabel.preferredMaxLayoutWidth = self.frame.size.width - kTCLabelLeftPadding - kTCLabelRightPadding - self.accessoryViewWidth;
[super layoutSubviews];
}
+ (CGFloat)heightForCellWithTableWidth:(CGFloat)tableWidth withTitleString:(NSString *)titleString detailString:(NSString *)detailString withDisclosureArrow:(BOOL)disclosure {
CGFloat widthForCalc = tableWidth - kTCLabelLeftPadding - kTCLabelRightPadding - (disclosure ? kAccessoryViewWidth : 0);
CGFloat titleHeight = [titleString boundingRectWithSize:CGSizeMake(widthForCalc, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName: mTCTitleLabelFont} context:nil].size.height;
CGFloat detailHeight = [detailString boundingRectWithSize:CGSizeMake(widthForCalc, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin|NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName: mTCDetailLabelFont} context:nil].size.height;
return kTCLabelTopPadding + titleHeight + detailHeight + kTCLabelBottomPadding + kTCLabelSpacing;
}
- (void) configureCellWithTitleLabelString:(NSString *)titleString detailLabelString:(NSString *)detailString {
self.titleLabel.text = titleString;
self.detailLabel.text = detailString;
}
@end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment