我试图让插入的视图填充插入它的容器视图,但是我得到了
无效参数不满足:[约束isKindOfClass:[NSLayoutConstraint class]]
- (void)insertedView:(NSView *)insertedView needsToFillContainerView:(NSView *)containerView {
[containerView addSubview:insertedView];
[containerView setTranslatesAutoresizingMaskIntoConstraints:NO];
[containerView addConstraints:@[
[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[insertedView]|"
options:0
metrics:nil
views:NSDictionaryOfVariableBindings(insertedView)],
[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[insertedView]|"
options:0
metrics:nil
views:NSDictionaryOfVariableBindings(insertedView)]
]
];
}
Run Code Online (Sandbox Code Playgroud)
基本上我要插入的一个视图是从VC加载的
- (void)addSubview:(NSView *)insertedView fillingAndInsertedIntoView:(NSView *)containerView {
[containerView addSubview:insertedView];
[insertedView setTranslatesAutoresizingMaskIntoConstraints:NO];
[containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[insertedView]|"
options:0
metrics:nil
views:NSDictionaryOfVariableBindings(insertedView)]];
[containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[insertedView]|"
options:0
metrics:nil
views:NSDictionaryOfVariableBindings(insertedView)]];
[containeView layoutIfNeeded];
}
Run Code Online (Sandbox Code Playgroud)
constraintsWithVisualFormat返回一个NSArray.
@[]是Objective C文字来创建一个NSArray.
所以,这里你的方法参数addConstraints是一个NSArray有两个元素,每个元素都是一个NSArray.
这是一个不正确的方法参数addConstraints.它期望一种NSArray类型的对象NSLayoutConstraint.
将调用更改为与此相关将解决问题:
[containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat: etc.
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我看到很多关于在代码中创建自动布局约束的帖子.Interface Builder是最好的方法.正如埃里卡·萨杜(Erica Sadun)如此简洁地将其置于她的书中,iOS Auto Layout Demystified:
您在Interface Builder中布局的任何视图都保证是可以满足的.您无法在IB中使用不一致的规则创建错误的接口.在代码中也是如此.
| 归档时间: |
|
| 查看次数: |
4873 次 |
| 最近记录: |