美文网首页
代码写约束

代码写约束

作者: HaibaraAii | 来源:发表于2016-01-05 17:50 被阅读124次

一段代码写的约束

- (void)setConstraints {
    
    for (UIView *view in [self.contentView subviews]) {
        view.translatesAutoresizingMaskIntoConstraints = NO;
    }
    
    NSDictionary *viewsDict = NSDictionaryOfVariableBindings(_titleLabel, _detailLabel, _nameLabel, _timeLabel, _commentLabel);
    
    [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-8-[_titleLabel]-5-[_detailLabel]"
                                                                             options:NSLayoutFormatAlignAllLeft | NSLayoutFormatAlignAllRight
                                                                             metrics:nil views:viewsDict]];
    
    [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[_detailLabel]-5-[_nameLabel]-8-|"
                                                                             options:NSLayoutFormatAlignAllLeft
                                                                             metrics:nil views:viewsDict]];
    
    [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-8-[_titleLabel]-8-|"
                                                                             options:0 metrics:nil views:viewsDict]];
    
    [self.contentView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"[_nameLabel]-10-[_timeLabel]-10-[_commentLabel]"
                                                                             options:NSLayoutFormatAlignAllTop | NSLayoutFormatAlignAllBottom
                                                                             metrics:nil views:viewsDict]];
    
    
}
        self.contentView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;

用于view自适应宽和高;

今天碰到写了约束怎么都不对的,纠结几个小时才发现问题。
对每个要手动添加约束的view都要设置view.translatesAutoresizingMaskIntoConstraints = NO;
这里用了for view in self.contentView 遍历contentView里的子View,但是这只是contentView的subview,对于其中Subview的subview就没遍历到,所以,一定要注意所有的view都设置了translatesAutoresizingMaskIntoConstraints = No.

今天又代码写约束,总是有warning,然后又开始检查是哪里的约束出了问题,问题解决了,又是很愚蠢的错误,如下
我在添加约束时用了active constraint语句,这个语句不管是哪个view里的constraint都会加,即使我前面的代码有些错误,也不容易发现是何处的问题
NSLayoutConstraint.activateConstraints(allConstraints)
另外一种添加约束的语句是
self.addConstraints(allConstraints)
如果约束的对象不是self的subview,代码会crash,所以也比较容易发现这方面的错误,我今天的问题就是在于subview是self的subview还是self.contentView的subview搞混了,所以又花了一个小时来检查约束错误。
所以,具体subview是添加在哪个view上的一定要搞清楚。

相关文章

  • 代码写约束

    一段代码写的约束 用于view自适应宽和高; 今天碰到写了约束怎么都不对的,纠结几个小时才发现问题。对每个要手动添...

  • 代码约束

    let coverWidth = NSLayoutConstraint(item: coverImageView,...

  • 代码约束

    iOS中使用代码约束一般是使用第三方来实现的OC使用 MasonrySwift使用 SnapKit两者的书写习...

  • Masonry约束库使用

    简化代码 基本使用 更新约束 重写约束 约束控件高宽比

  • 使用 xib 设置约束

    0.使用代码设置约束和使用 xib 设置约束,两种方式各有好处吧.代码约束便于维护和修改, xib 约束则可快速搭...

  • 代码约束NSLayoutConstraint

    项目中都是用别人封装好的第三方:masonry,跟未封装的一比不得不说masony的强大。前段时间,一朋友说到约束...

  • VFL代码约束

    _ima1 = [[UIImageView alloc]initWithFrame:CGRectZero]; _i...

  • 纯代码约束

    方法一import SnapKit https://www.jianshu.com/p/b61b93cde38a[...

  • mac 代码给控件添加约束

    mac上用代码给控件添加约束和iOS上是一样的。 也可以这么写

  • iOS 用代码添加约束

    iOS 用代码添加约束

网友评论

      本文标题:代码写约束

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