我在Xcode 8.3.3,OSX而不是iOS。
我有一个用作容器的customView来替换其中的其他视图。 右侧的深蓝色框表示容器:
容器的约束在IB中设置如下,其中" scrollView"是表格左侧的滚动视图:
这可以实现垂直缩放(允许scrollView垂直缩放),这是所需的行为:
现在我使用以下代码向容器添加子视图:
NSStoryboard *storyBoard = [NSStoryboard storyboardWithName:@"Main" bundle:nil];
_previewViewController = [storyBoard instantiateControllerWithIdentifier:@"showSHPreviewViewController"];
CGRect newFrame = CGRectMake(0, 0,CGRectGetWidth(_previewViewController.view.bounds),CGRectGetHeight(_previewViewController.view.bounds));
_previewViewController.view.frame = newFrame;
[self.previewContainer addSubview:_previewViewController.view];
这可以按预期工作:
我的问题是,我希望拉伸子视图,使其适合其容器的整个高度。因此,我必须以编程方式设置NSLayoutConstraints。但是我没有得到逻辑......无论我尝试什么导致滚动视图和容器都不能垂直缩放的行为。
这是我写这篇文章之前的最后一次尝试:
[self.previewContainer addConstraint:[NSLayoutConstraint
constraintWithItem:_previewViewController.view
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:self.previewContainer
attribute:NSLayoutAttributeTop
multiplier:1.0
constant:0]];
[self.previewContainer addConstraint:[NSLayoutConstraint constraintWithItem:_previewViewController.view
attribute:NSLayoutAttributeLeft
relatedBy:NSLayoutRelationEqual
toItem:self.previewContainer
attribute:NSLayoutAttributeLeft
multiplier:1.0
constant:0]];
[self.previewContainer addConstraint:[NSLayoutConstraint constraintWithItem:_previewViewController.view
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:self.previewContainer
attribute:NSLayoutAttributeBottom
multiplier:1.0
constant:0]];
我可以确认添加的子视图的内容设置正确并且可以调整大小(没有"高度锁定")。