美文网首页
代码添加约束不生效及crash记录

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

作者: 礼锦 | 来源:发表于2018-01-10 11:27 被阅读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

相关文章

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

    情景还原 现有的代码的界面全部是storyboard写出来的,现在想在已有UIView *mPlayView上添加...

  • 代码实现AutoLayout

    代码实现AutoLayout 添加约束的规则(1) 添加约束的规则(2) 添加约束的规则(3) NSLayoutC...

  • iOS 用代码添加约束

    iOS 用代码添加约束

  • IOS 代码添加约束

    项目中页面代码布局使用的一般都是Masonry,修改以前的项目是发现有的页面是用OC原生的NSLayoutCons...

  • Swift 代码添加约束

    注意:view添加或更改约束之前需要将该view的属性translatesAutoresizingMaskInto...

  • IOS代码添加约束

    前言 作为一个刚入门的IOS开发人员,最开始的时候是在XIB上拖动去画界面。随着业务的需求增长,我们会发现这种方式...

  • IOS 代码添加约束

    Item == 第一个控件attribute == 第一个控件的什么属性relatedBy == 等于/小于等于/...

  • 使用代码实现Autolayout的方法

    一.利用系统原装代码创建约束 创建约束 添加约束 注意一定要在拥有父控件之后再添加约束关闭Autoresizing...

  • Autolayout-NSLayoutConstraint代码添

    一、代码添加约束顺序### 创建控件 将控件添加到父控件中 关闭需要添加约束的控件的Autoresizing属性 ...

  • Autolayout

    使用代码实现Autolayout的方法1 创建约束 添加约束 注意 一定要在拥有父控件之后再添加约束 关闭Auto...

网友评论

      本文标题:代码添加约束不生效及crash记录

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