如何以编程方式在拆分视图内自动将另一个xib / nib中的视图布局为子视图?

时间:2014-03-14 10:44:07

标签: objective-c resize autolayout nsview

在我的OS X项目中,我为NSView编写了一个自定义视图控制器,它在一个单独的xib文件中定义。该视图包含使用自动布局定义的按钮和子视图。

现在我尝试以编程方式加载视图,并尝试将加载的视图作为子视图附加到拆分视图。

我创建了一个小帮手来设置约束

-(void)autoresizeConstraintsForSubview:(NSView*)subview inSuperview:(NSView*)superview {

[superview addConstraint:[NSLayoutConstraint constraintWithItem:subview
                                                      attribute:NSLayoutAttributeLeft
                                                      relatedBy:NSLayoutRelationEqual
                                                         toItem:superview
                                                      attribute:NSLayoutAttributeLeft
                                                     multiplier:1.0 constant:0]];

[superview addConstraint:[NSLayoutConstraint constraintWithItem:subview
                                                      attribute:NSLayoutAttributeRight
                                                      relatedBy:NSLayoutRelationEqual
                                                         toItem:superview
                                                      attribute:NSLayoutAttributeRight
                                                     multiplier:1.0 constant:0]];

[superview addConstraint:[NSLayoutConstraint constraintWithItem:subview
                                                      attribute:NSLayoutAttributeTop
                                                      relatedBy:NSLayoutRelationEqual
                                                         toItem:superview
                                                      attribute:NSLayoutAttributeTop
                                                     multiplier:1.0 constant:0]];

[superview addConstraint:[NSLayoutConstraint constraintWithItem:subview
                                                      attribute:NSLayoutAttributeBottom
                                                      relatedBy:NSLayoutRelationEqual
                                                         toItem:superview
                                                      attribute:NSLayoutAttributeBottom
                                                     multiplier:1.0 constant:0]];
}

- (void)windowDidLoad
{
    [super windowDidLoad];

    // Implement this method to handle any initialization after your window controller's window has been loaded from its nib file.
    // now load the detailed views.
    self.chart1 = [[BTChartViewController alloc] initWithNibName:@"ChartView" bundle:nil];
    [self.chart1.view setFrameOrigin:NSMakePoint(0, 0)];
    [self.view1 addSubview:self.chart1.view];
    [self.chart1.view setTranslatesAutoresizingMaskIntoConstraints:NO];

    [self autoresizeConstraintsForSubview:self.chart1.view inSuperview:self.view1];

    //[self.window  visualizeConstraints:[self.chart1.view constraints]];
    //[self.window  visualizeConstraints:[self.view1 constraints]];
}

其中self.view1,self.view2是拆分视图中自定义视图的出口。此时不使用self.view2。 而self.chart1是一个工作视图控制器,它加载视图(一些图表)。

约束似乎乍一看,因为视图已加载,所有内容都会显示,图表也会完美显示。但是在将图表视图设置为子视图后,拆分视图将无法再调整大小。拆分视图的左侧区域是固定的,我无法再移动分割条。

如果我在界面构建器中设置所有内容,它可以完美地运行。我的目标是设置几个拆分视图,以便我有4个具有独立视图控制器的区域。

如何设置约束以不阻止调整大小行为? 子视图的显示大小始终是界面构建器中的“内在大小”。但是我希望子视图始终具有拆分视图的自定义视图的大小,并且能够调整拆分视图的大小。

有人知道这里出了什么问题吗?

0 个答案:

没有答案