mirror of
https://github.com/Instagram/IGListKit
synced 2026-05-06 06:58:26 +00:00
Summary: Adds the source for a remodel plugin to autogenerate models conforming to `IGListDIffable`. - [x] All tests pass. Demo project builds and runs. (source untouched, purely additive) - [x] I added remodel plugin tests + and a new guide explaining the installation + usage - [ ] I added an entry to the `CHANGELOG.md` for any breaking changes, enhancements, or bug fixes. - [x] I have reviewed the [contributing guide](https://github.com/Instagram/IGListKit/blob/master/.github/CONTRIBUTING.md) Closes https://github.com/Instagram/IGListKit/pull/1083 Reviewed By: rnystrom Differential Revision: D6937925 Pulled By: calimarkus fbshipit-source-id: 54228cddf387cf20ceceec1732e439ab6fd4b984
103 lines
4.1 KiB
Objective-C
103 lines
4.1 KiB
Objective-C
/**
|
|
Copyright (c) 2016-present, Facebook, Inc. All rights reserved.
|
|
|
|
The examples provided by Facebook are for non-commercial testing and evaluation
|
|
purposes only. Facebook reserves all rights not expressly granted.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
FACEBOOK BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
|
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
*/
|
|
|
|
#import "PersonCell.h"
|
|
|
|
#import "PersonModel.h"
|
|
|
|
@interface PersonCell ()
|
|
@property (nonatomic, strong) UIView *avatarView;
|
|
@property (nonatomic, strong) UILabel *nameLabel;
|
|
@property (nonatomic, strong) UIView *separatorView;
|
|
@property (nonatomic, assign) CGFloat separatorHeight;
|
|
@end
|
|
|
|
@implementation PersonCell
|
|
|
|
- (instancetype)init {
|
|
if (self = [super init]) {
|
|
[self setupSubviews];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (instancetype)initWithFrame:(CGRect)frame {
|
|
if (self = [super initWithFrame:frame]) {
|
|
[self setupSubviews];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
- (void)setupSubviews {
|
|
self.avatarView = [[UIView alloc] init];
|
|
self.avatarView.backgroundColor = [UIColor colorWithWhite:0.85 alpha:1.0];
|
|
[self.contentView addSubview:self.avatarView];
|
|
|
|
self.nameLabel = [[UILabel alloc] init];
|
|
self.nameLabel.textColor = [UIColor darkTextColor];
|
|
self.nameLabel.textAlignment = NSTextAlignmentLeft;
|
|
[self.contentView addSubview:self.nameLabel];
|
|
|
|
self.separatorView = [[UIView alloc] init];
|
|
self.separatorView.backgroundColor = [UIColor colorWithWhite:0.5 alpha:1.0];
|
|
[self.contentView addSubview:self.separatorView];
|
|
|
|
self.separatorHeight = (1 / [UIScreen mainScreen].scale);
|
|
}
|
|
|
|
- (void)layoutSubviews {
|
|
[super layoutSubviews];
|
|
|
|
const CGFloat outerInset = 10;
|
|
const CGRect bounds = self.contentView.bounds;
|
|
const CGRect insetBounds = CGRectInset(bounds, outerInset, outerInset);
|
|
const CGFloat avatarViewWidth = insetBounds.size.height;
|
|
|
|
const CGRect avatarViewFrame = CGRectMake(outerInset, outerInset, avatarViewWidth, avatarViewWidth);
|
|
if (!CGRectEqualToRect(avatarViewFrame, self.avatarView.frame)) {
|
|
self.avatarView.layer.cornerRadius = round(avatarViewWidth / 2.0);
|
|
self.avatarView.layer.masksToBounds = YES;
|
|
self.avatarView.frame = avatarViewFrame;
|
|
}
|
|
|
|
const CGFloat avatarLabelInset = 8;
|
|
self.nameLabel.frame = CGRectMake(CGRectGetMaxX(avatarViewFrame) + avatarLabelInset,
|
|
outerInset,
|
|
CGRectGetWidth(insetBounds) - avatarViewWidth - avatarLabelInset * 2,
|
|
CGRectGetHeight(insetBounds));
|
|
|
|
self.separatorView.frame = CGRectMake(0,
|
|
CGRectGetHeight(bounds) - self.separatorHeight,
|
|
CGRectGetWidth(bounds),
|
|
self.separatorHeight);
|
|
}
|
|
|
|
static NSAttributedString *AttributedStringForPerson(PersonModel *person) {
|
|
NSMutableAttributedString *string = [NSMutableAttributedString new];
|
|
[string appendAttributedString:[[NSAttributedString alloc] initWithString:person.firstName
|
|
attributes:@{NSFontAttributeName:[UIFont boldSystemFontOfSize:15.0]}]];
|
|
[string appendAttributedString:[[NSAttributedString alloc] initWithString:@" "
|
|
attributes:@{NSFontAttributeName:[UIFont boldSystemFontOfSize:15.0]}]];
|
|
[string appendAttributedString:[[NSAttributedString alloc] initWithString:person.lastName
|
|
attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:15.0]}]];
|
|
return string;
|
|
}
|
|
|
|
- (void)setPerson:(PersonModel *)person {
|
|
_person = [person copy];
|
|
|
|
self.nameLabel.attributedText = AttributedStringForPerson(person);
|
|
}
|
|
|
|
@end
|