以编程方式创建的NSLayoutconstraint失败

时间:2017-06-20 16:39:53

标签: objective-c macos autolayout xcode8 nslayoutconstraint

我在Xcode 8.3.3,OSX而不是iOS。

我有一个用作容器的customView来替换其中的其他视图。 右侧的深蓝色框表示容器:

enter image description here

容器的约束在IB中设置如下,其中" scrollView"是表格左侧的滚动视图:

enter image description here

这可以实现垂直缩放(允许scrollView垂直缩放),这是所需的行为:

enter image description here

现在我使用以下代码向容器添加子视图:

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];

这可以按预期工作:

enter image description here

我的问题是,我希望拉伸子视图,使其适合其容器的整个高度。因此,我必须以编程方式设置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]];

我可以确认添加的子视图的内容设置正确并且可以调整大小(没有"高度锁定")。

0 个答案:

没有答案