我试图让插入的视图填充插入它的容器视图,但是我得到了
无效参数不满足:[约束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)]
]
];
}
基本上我要插入的一个视图是从VC加载的
答案 0 :(得分:5)
constraintsWithVisualFormat
会返回NSArray
。
@[]
是创建NSArray
的Objective C文字。
因此,此处addConstraints
的方法参数是NSArray
,其中包含两个元素,每个元素都是NSArray
。
addConstraints
这是一个不正确的方法参数。它期望NSArray
类型为NSLayoutConstraint
的对象。
将调用更改为与此相关将解决问题:
[containerView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat: etc.
顺便说一下,我看到很多关于在代码中创建自动布局约束的帖子。 Interface Builder是最好的方法。正如Erica Sadun如此简洁地将其写入她的书iOS Auto Layout Demystified:
您在Interface Builder中展示的任何视图都可以保证满意。您无法在IB中创建具有不一致规则的错误的接口。在代码中也是如此。