今天用自动布局纯代码的方式,并且引用第三方库写了一个微博界面的案例,其中的每个约束之间都是相互联
系的,例如label 和 text 不能设置宽度和高度的具体数值,一旦固定下来,可能会出现错误,例如不会
换行,文字显示不全等等一些列问题,
一个技巧,手动布局时,最好从一侧开始进行约束,一般推荐上面和左侧,进行约束,约束时,一定要找一个
固定的控件进行参考,在执行约束,否则,因为优先级的缘故,可能被优先级高的一方拽走,这里是要注意的
地方,下面是截取的一段实例进行了简要的说明,也对自动布局的理解做了如上浅谈。。。
#import "XDWeiBoViewCell.h"
#import "Masonry.h"
@interface XDWeiBoViewCell ()
@property (nonatomic, weak)UIImageView *iconImage;
@property (nonatomic, weak)UILabel *nameLabel;
@property (nonatomic, weak)UILabel *txtLabel;
@property (nonatomic, weak)UIImageView *picImage;
@property (nonatomic, weak)UIImageView *vipImage;
@end
@implementation XDWeiBoViewCell
+(instancetype)weiboCellWithTableView:(UITableView *)tableView
{
NSString *ID = @"weibo";
XDWeiBoViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
if (cell == nil) {
cell = [[XDWeiBoViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
}
return cell;
}
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
if (self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]) {
UIImageView *iconImage = [[UIImageView alloc] init];
UIImageView *picImage = [[UIImageView alloc] init];
UIImageView *vipImage = [[UIImageView alloc] init];
UILabel *nameLabel = [[UILabel alloc] init];
UILabel *txtLabel = [[UILabel alloc] init];
self.iconImage = iconImage;
self.picImage = picImage;
self.nameLabel = nameLabel;
self.txtLabel = txtLabel;
self.vipImage = vipImage;
[self.contentView addSubview:iconImage];
[self.contentView addSubview:picImage];
[self.contentView addSubview:vipImage];
[self.contentView addSubview:nameLabel];
[self.contentView addSubview:txtLabel];
self.nameLabel.numberOfLines = 1;
self.txtLabel.numberOfLines = 0;
self.nameLabel.font = [UIFont systemFontOfSize:15];
self.txtLabel.font = [UIFont systemFontOfSize:13];
// if (self.contentView.constraints) {
// self.didSetUpConstraints = YES;
// }else{
// self.didSetUpConstraints = NO;
// }
}
return self;
}
-(void)setWeiboData:(XDWeibo *)weiboData
{
_weiboData = weiboData;
self.iconImage.image = [UIImage imageNamed:weiboData.icon];
self.txtLabel.text = weiboData.text;
self.nameLabel.text = weiboData.name;
if (weiboData.isVip) {
self.vipImage.hidden = NO;
self.vipImage.image = [UIImage imageNamed:@"vip"];
}else{
self.vipImage.hidden = YES;
}
if (weiboData.picture) {
self.picImage.hidden = NO;
self.picImage.image = [UIImage imageNamed:weiboData.picture];
}else{
self.picImage.hidden = YES;
self.picImage = nil;
}
[self.iconImage mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.contentView.mas_left).with.mas_offset(8);
make.top.equalTo(self.contentView.mas_top).with.mas_offset(8);
make.width.mas_equalTo(40);
make.height.mas_equalTo(40);
}];
[self.nameLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.equalTo(self.iconImage.mas_right).with.mas_offset(8);
make.centerY.equalTo(self.iconImage.mas_centerY);
}];
[self.vipImage mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerY.equalTo(self.iconImage.mas_centerY);
make.left.equalTo(self.nameLabel.mas_right).with.mas_offset(8);
make.width.mas_equalTo(10);
make.height.mas_equalTo(10);
}];
[self.txtLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.iconImage.mas_bottom).with.mas_offset(8);
make.left.equalTo(self.contentView.mas_left).with.mas_offset(8);
make.right.equalTo(self.contentView.mas_right).with.mas_offset(-8);
}];
if (weiboData.picture) {
[self.picImage mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.txtLabel.mas_bottom).with.mas_offset(8);
make.left.equalTo(self.contentView.mas_left).with.mas_offset(8);
make.height.equalTo(self.picImage.mas_width);
make.bottom.equalTo(self.contentView.mas_bottom).with.mas_offset(-8);
make.width.mas_equalTo(80);
}];
}else{
[self.txtLabel mas_makeConstraints:^(MASConstraintMaker *make) {
make.bottom.equalTo(self.contentView.mas_bottom).with.offset(-8);
}];
}
[self.contentView setNeedsLayout];
[self.contentView layoutIfNeeded];
[self.contentView setNeedsUpdateConstraints];
[self.contentView updateConstraintsIfNeeded];
}
- (void)layoutSubviews
{
[super layoutSubviews];
}
@end