布局闻道丶iOS(大杂烩)

Masonry使用过程中一定会遇到的问题

2016-05-18  本文已影响4149人  Xcode8

github上的示例demo 很详细

Masonry 源码:https://github.com/Masonry/Masonry

介绍:

      Masonry是一个轻量级的布局框架 拥有自己的描述语法 采用更优雅的链式语法封装自动布局 简洁明了 并具有高可读性 而且同时支持 iOS 和 Max OS X。Masonry现在是使用很广泛的第三方做约束和适配的库,很强大。masonry使用起来还非常的方便。

经常犯的错误---注意事项:使用mosonry添加约束,尤其是父子控件,他们之间的关系一定要在添加约束之前 addSubviews:。否则约束添加不成功。


一.错误信息统计(width改为with)

  1.reason: 'Attributes should be chained before defining the constraint relation'

      崩溃到masonry内部的方法里面:

    崩溃的提示信息:

     直接上代码:(这是运行没有问题的代码)

     [self.GradientLabel mas_makeConstraints:^(MASConstraintMaker *make) {

           make.right.equalTo(self.CurrenPriceLabel.mas_right);

          make.left.equalTo(self.VariationLabel.mas_left).with.offset(30);//更改的是此处的width变为with,否则会报错

          make.width.equalTo(@60);//此处的width不需要改动

          make.height.mas_equalTo(@30);

     }];

注意:解决方法将width更改为with即可。并不是全部的width都要改变,注意看上面的代码部分。

二.错误信息统计(父子控件之间的关系没有建立好)

2.1、reason:couldn't find a common superview for<UIView: ...frame: ...layer: ...>

解决方法:查---好自己做约束的父子控件之间的关系是否建立起来了。

         UITextField *nameTextField = [UITextField new];

         nameTextField.font = [UIFont systemFontOfSize:14];

         nameTextField.placeholder = @"请再次输入密码";

        //父子控件的建立好关系:self.testView为父控件,nameTextField为子控件

         [self.testView addSubview:nameTextField];

         //开始约束

        [lable mas_makeConstraints:^(MASConstraintMaker *make) {

        make.left.mas_equalTo(self.testView.mas_left).with.offset(20);

        make.top.mas_equalTo(self.testView.mas_top).with.mas_offset(0);

        make.height.mas_equalTo(30);

        make.width.mas_equalTo(50);

     }];

上一篇下一篇

猜你喜欢

热点阅读