我正在使用iOS 6 AutoLayout功能与
Masonry DSL来排列UITableViewCell中的视图.这是我想要实现的布局安排:
200新X- 200 X- 200 X- 200 200 X- 200 X- 200 200 X- 200 200:在我目前的实现中,这是我所得到的:
看来,containerView已经正确地获得了垂直居中的位置,但是它的宽度和高度都是零,因此没有正确显示.如何指示containerView适合其大小的内容?代码段附在下面.
谢谢!
UITableViewCell初始化程序
- (id)initWithReuseIdentifier:(Nsstring *)reuseIdentifier { if (self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier]) { self.titleLabel = [[UILabel alloc] init]; self.titleLabel.font = [UIFont boldSystemFontOfSize:[UIFont smallSystemFontSize]]; self.titleLabel.text = @"ノートタイトル"; self.coverImage = [[UIView alloc] init]; self.coverImage.backgroundColor = [UIColor carrotColor]; self.avatarImage = [[UIView alloc] init]; self.avatarImage.backgroundColor = [UIColor emerlandColor]; self.authorLabel = [[UILabel alloc] init]; self.authorLabel.font = [UIFont systemFontOfSize:[UIFont smallSystemFontSize]]; self.authorLabel.text = @"著者の名前"; self.containerView = [[UIView alloc] init]; self.containerView.backgroundColor = [UIColor lightGrayColor]; [self.containerView addSubview:self.titleLabel]; [self.containerView addSubview:self.avatarImage]; [self.containerView addSubview:self.authorLabel]; [self.contentView addSubview:self.containerView]; [self.contentView addSubview:self.coverImage]; self.selectionStyle = UITableViewCellSelectionStyleNone; [self updateConstraintsIfNeeded]; } return self; }
UITableViewCell updateConstraints
- (void)updateConstraints { [super updateConstraints]; [self.coverImage mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.contentView).with.offset(20); make.top.equalTo(self.contentView).with.offset(5); make.bottom.equalTo(self.contentView).with.offset(-5); make.width.equalTo(self.coverImage.mas_height).multipliedBy(0.75); }]; [self.containerView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.coverImage.mas_right).with.offset(10); make.centerY.equalTo(self.contentView); }]; [self.titleLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.containerView); make.top.equalTo(self.containerView); }]; [self.avatarImage mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.titleLabel.mas_bottom).with.offset(5); make.left.equalTo(self.titleLabel); make.width.equalTo(@20); make.height.equalTo(@20); }]; [self.authorLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.avatarImage.mas_right).with.offset(5); make.centerY.equalTo(self.avatarImage); }]; }
解决方法
我找到了解决我自己的问题.显然,为了使containerView动态调整自己的大小,我们必须确保每个元素之间的连接刚好相互连接,并且超级视图的边缘(即containerView).例如,在VFL中应该是这样的:“V:| -10- [child1] -5- [child2] -5- |”
所以在我的情况下,我添加一个新的约束make.bottom.equalTo(self.containerView)到avatarImage,现在superview知道如何高度自己!