情景还原
现有的代码的界面全部是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
网友评论