代码添加约束不生效及crash记录

2018-01-10  本文已影响0人  礼锦

情景还原

现有的代码的界面全部是storyboard写出来的,现在想在已有UIView *mPlayView上添加一自定义NewView 其中要在NewView中添加一个UIImageView并添加约束使其与父View中心对齐。

NewView *newView = [[NewView alloc]initWithFrame:_mPlayView.bounds];
[_mPlayView addSubview:newView];
[newView showEffect];

NewView中代码如下

- (void)showEffect {
    if (_mImage)
        [_mImage removeFromSuperview];

    _mImage = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"ic_recharge"]];
    _mImage.translatesAutoresizingMaskIntoConstraints = NO;
    [self addSubview:_mImage];
    
    NSLayoutConstraint* yConstraint = [NSLayoutConstraint constraintWithItem:_mImage
                                                                   attribute:NSLayoutAttributeCenterY
                                                                   relatedBy:NSLayoutRelationEqual
                                                                      toItem:self
                                                                   attribute:NSLayoutAttributeCenterY
                                                                  multiplier:1.f constant:0.0f];
    
    NSLayoutConstraint* xConstraint = [NSLayoutConstraint constraintWithItem:_mImage
                                                                   attribute:NSLayoutAttributeCenterX
                                                                   relatedBy:NSLayoutRelationEqual
                                                                      toItem:self
                                                                   attribute:NSLayoutAttributeCenterX
                                                                  multiplier:1.f constant:0.0f];
    [self addConstraints:@[yConstraint, xConstraint]];
}

这里面我遇到两个坑:
1.translatesAutoresizingMaskIntoConstraints必须设置为NO,否则不生效。
2.addConstraints一定要在addSubview之后,否则crash。

然而结果并不是我想要的


不正常.gif

图中黑色为mPlayView 绿色为NewView

后来我在创建NewView的时候添加了约束:

[_mPlayView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[newView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(newView)]];
[_mPlayView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[newView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(newView)]];

这事就可以正常的实现我想要的功能了


正常.gif
上一篇 下一篇

猜你喜欢

热点阅读