关于使用第三方库masonry的代码实例

今天用自动布局纯代码的方式,并且引用第三方库写了一个微博界面的案例,其中的每个约束之间都是相互联

系的,例如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

原文地址:https://www.cnblogs.com/xdios/p/4499202.html