美文网首页
代码写约束

代码写约束

作者: 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上的一定要搞清楚。

    相关文章

      网友评论

          本文标题:代码写约束

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