我尝试创建基于此tutorial翻转的卡片视图。它创建一个UIView并添加卡片视图。
为此,我创建了一个自定义UIView(使用Xib),到目前为止它工作正常。我在我的Storyboard中为调用addSubview的视图添加了正确的约束。到目前为止这是有效的,但是当我添加自定义UIView时,它指的是xib中的大小,而不是superview的大小。
如何添加必要的Autolayout约束以使子视图适合其超级视图?
谢谢!
P.S。我已经在Objective-C中写了它,但如果答案是快速的或Objective-C,那对我来说并不重要。
答案 0 :(得分:3)
不确定,有什么不对。我按照以下方式做了同样的事情:
1)ProductItemView,UIView的子类,并创建了具有UIView对象的ProductItemView.xib。
2)在.xib中将File的所有者类设置为ProductItemView,以便可以加载.xib和其他子视图的UIView对象并与IBOutlet链接。(见图)
3)在init方法(initWithFrame:在我的情况下)方法下面放置代码
NSArray *nibViewArray = [[NSBundle mainBundle] loadNibNamed:@"ProductItemView" owner:self options:nil];
if (nibViewArray.count) {
UIView *nibView = [nibViewArray objectAtIndex:0];
[self addSubview:nibView];
nibView.translatesAutoresizingMaskIntoConstraints = NO;
NSDictionary *viewDict = NSDictionaryOfVariableBindings(nibView);
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-0-[nibView]-0-|" options:0 metrics:nil views:viewDict]];
[self addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-0-[nibView]-0-|" options:0 metrics:nil views:viewDict]];
}
最后创建ProdutItemView的对象并使用框架或设置Constraints并将其添加到超级视图。如果要设置约束,则不要忘记将translatesAutoresizingMaskIntoConstraints属性设置为NO。 希望它对你有所帮助。
答案 1 :(得分:0)
如果你想在代码中这样做。似乎对我来说更好,更有意义。
// make sure myCustomView is added to the superview
// and ignore the layout guides if the superview is not your view controller
[myCustomView setTranslatesAutoresizingMaskIntoConstraints: NO];
id topGuide = self.topLayoutGuide;
id bottomGuide = self.bottomLayoutGuide;
NSDictionary * viewsDictionary = NSDictionaryOfVariableBindings(myCustomView, topGuide, bottomGuide);
[mySuperiew addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[myCustomView]|" options:0 metrics: 0 views:viewsDictionary]];
[mySuperiew addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[topGuide][myCustomView][bottomGuide]|" options:0 metrics: 0 views:viewsDictionary]];