Masonry使用总结

作者: 小码农_gjw | 来源:发表于2016-08-11 14:09 被阅读105次

在使用第三方库Masonry的过程中,遇到过各种各样的坑,以下就把笔者使用过程中的问题总结如下:

  • 控件必须要添加到父view上之后才可以设置约束

  • 一个控件一般需要约束完整,不然会报约束不安全的错误

  • UILabel可以不约束宽高,会根据文本自动填充,

  • 设置TableViewCell的高的时候,可以设置cell的高根据子控件来约束,前提是需要将

 tableView.rowHeight = UITableViewAutomaticDimension;
 tableView.estimatedRowHeight = 40;
  • tableView的tableHeadView和tableFootView不可以使用约束,需要使用设置frame

  • 当设置scrollView的contentSize的时候,可以根据子控件约束其contentSize,使用一个临时变量的View记录最后一个子View,然后设置约束信息

代码示例:

    self.showGreenView = YES;

    UIView *redView = [UIView new];
    redView.backgroundColor = [UIColor redColor];
    [self.view addSubview:redView];
    
    UIView *orangeView = [UIView new];
    orangeView.backgroundColor = [UIColor orangeColor];
    [redView addSubview:orangeView];
    self.orangeView = orangeView;
    
    UIView *greenView = [UIView new];
    greenView.backgroundColor = [UIColor greenColor];
    [redView addSubview:greenView];
    self.greenView = greenView;
    
    [redView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.mas_equalTo(0);
        make.top.mas_equalTo(70);
    }];
    
    [self.orangeView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.top.mas_equalTo(10);
        make.bottom.mas_equalTo(-10);
        make.height.mas_equalTo(200);
        make.width.mas_equalTo(100);
    }];
    
    [self.greenView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.mas_equalTo(self.orangeView.right).offset(10);
        make.top.bottom.mas_equalTo(self.orangeView);
        make.width.mas_equalTo(100);
        make.right.mas_equalTo(-10);
    }];

redView的大小可以通过子控件orangeView来确定height,greenView来确定width

- (void)touchesEnded:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
    self.showGreenView = !self.showGreenView;
    [self.view setNeedsUpdateConstraints];
    [self.view updateConstraintsIfNeeded];
    [UIView animateWithDuration:0.25 animations:^{
        [self.view layoutIfNeeded];
        self.greenView.alpha = self.showGreenView ? 1:0;
    }];
}
- (void)updateViewConstraints {
    [self.orangeView mas_updateConstraints:^(MASConstraintMaker *make) {
        if (self.showGreenView) {
            make.width.mas_equalTo(100);
        } else {
            make.width.mas_equalTo(300);
        }
    }];
    
    [self.greenView mas_updateConstraints:^(MASConstraintMaker *make) {
        if (self.showGreenView) {
            make.width.mas_equalTo(100);
        } else {
            make.width.mas_equalTo(0);
        }
    }];

    [super updateViewConstraints];
}

效果图如下:


相关文章

  • Autolayout、VFL、Masonry

    适配 VFL语言 Masonry 代码实现Autolayout VFL代码 Masonry使用 总结 使用代码实现...

  • 实用iOS第三方框架

    界面布局 github地址:Masonry Masonry使用总结 : 赵不懂的博客 网络请求 github地址...

  • Masonry自适应UISrollview

    Masonry自适应UISrollview 总结:1.显示视图使用Masonry对srollview作约束,使to...

  • Masonry使用总结

    Masonry使用总结 一、Masonry简介 Masonry是一个轻量级的布局框架,适用于iOS以及OS X。它...

  • Masonry 自动布局 及注意点

    Masonry和FDTemplateLayoutCell搭配使用总结 http://www.jianshu.com...

  • Masonry使用总结

    核心数据结构 MASViewAttributeMASViewAttribute存储了UIView及其布局属性(NS...

  • Masonry使用总结

    https://github.com/SnapKit/Masonry https://www.cnblogs.co...

  • Masonry使用总结

    以下为笔者工作总结,写法看控件设计场景,自行取舍 Masonry详解1:点击跳转 铺满上下左右 上下左右间距为10...

  • Masonry使用总结

    在使用第三方库Masonry的过程中,遇到过各种各样的坑,以下就把笔者使用过程中的问题总结如下: 控件必须要添加到...

  • Masonry使用总结

    方法requiresConstraintBasedLayout的含义 方法+ (BOOL)requiresCons...

网友评论

    本文标题:Masonry使用总结

    本文链接:https://www.haomeiwen.com/subject/srfssttx.html