Masonry约束间距相等

作者: 51bitquant | 来源:发表于2015-11-05 21:44 被阅读4349次

    Masonry约束间距相等

    最近发现Masonry的官方Demo太简单了,想写一个相对项目级的Demo,但是发下最近太忙,所有只能写一点实用的Demo。有时间的时候在写个完整的项目级demo。

    之前介绍过利用Masonry进行约束宽高相等的例子, Masonry如何约束宽高相等,但是要真正用在项目中开发,项目中的控件布局会更加复杂,所以今天介绍另一个Demo,约束间隙相等。实际上AutoLayout的本质就是相对。你要约束布局,就必须指明你是相对那个控件进行布局的。

    现在演示一个Demo

    要求:现有3个View,大小相等(80,40),在俯视图的中间,距离左右边界为20,它们之间的间隙相等。

    代码如下:

    
    - (void) setupUI1
    {
        UIView * oneView = UIView.new;
        UIView * twoView = UIView.new;
        UIView * threeView = UIView.new;
        
        
        oneView.backgroundColor = [UIColor redColor];
        twoView.backgroundColor = [UIColor yellowColor];
        threeView.backgroundColor = [UIColor greenColor];
        [self.view addSubview:oneView];
        [self.view addSubview:twoView];
        [self.view addSubview:threeView];
        
        UIView * spaceOneView = UIView.new;
        UIView * spaceTwoView = UIView.new;
        [self.view addSubview:spaceTwoView];
        [self.view addSubview:spaceOneView];
        
        CGSize size = CGSizeMake(80,40);
        [oneView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.size.mas_equalTo(size);
            make.centerY.equalTo(self.view);
            make.left.equalTo(self.view).offset(20);
            make.right.equalTo(spaceOneView.left);
        }];
        
        [twoView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.size.equalTo(oneView);
            make.centerY.equalTo(self.view);
            make.left.equalTo(spaceOneView.right);
            make.right.equalTo(spaceTwoView.left);
        }];
        
        [threeView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.size.equalTo(oneView);
            make.centerY.equalTo(self.view);
            make.right.equalTo(self.view).offset(-30);
            //make.left.equalTo(twoView.right).offset(100);
            make.left.equalTo(spaceTwoView.right);
        }];
        
        [spaceOneView makeConstraints:^(MASConstraintMaker *make) {
            make.width.equalTo(spaceTwoView.width);
            make.centerY.equalTo(self.view);
            //        make.height.equalTo(twoView);
            //        make.height.equalTo(spaceTwoView);
        }];
        
        [spaceTwoView makeConstraints:^(MASConstraintMaker *make) {
            make.centerY.equalTo(self.view);
        }];
    }
    
    

    效果如下:

    demo1_0.png
    demo1_1.png

    虽然这里我们约束是三个UIView,但是我们需要初始化总共五个View,其中两个View是作为占位视图的。这个Demo的核心是要学会用占位视图来进行布局,因为自动布局就是相对。学会这个Demo,iOS开发中的AutoLayout布局基本不会有问题了。但是这样特别麻烦,约束三个View还好,如果10View,我们是不是要初始化9个View来进行占位呢?如果需要约束所有的间距都相等,我们是不是初始化话11个占位视图呢?实际上我们写个分类就可以了,这样我们就可以直接调用就可以了。明白这一点,可以自己尝试一下写个分类或者工具类。

    技术交流群:QQ群:344914307

    相关文章

      网友评论

      • 矫炎圻: :grin: 不规范,发消息用[ ];取属性用.
      • 看风筝的小男孩:有没有想过用一个for循环去搞定这个东西,因为现实使用中很可能出现每行多少个 总共多少排的这种情况 应该怎么处理 总不能一个一个的去建吧
        看风筝的小男孩:@StephenMark 我建了一个,排树多的话 还好,这排数少的话着实没有frame方便,写了好多代码,就为了弄两排按钮;不过效果的话 应该还是Masonry好点吧
        51bitquant:这个实际中都会用for循环去解决的
      • f62385835449:本篇作者太聪明了,完美地解决了我的问题!
        51bitquant:@老王学安卓 哈哈!过奖了

      本文标题:Masonry约束间距相等

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