1

我在 Interface Builder 中制作了一个 NSWindow。这个窗口里面是一个 NSScrollView,里面是一个自定义的 NSView。

NSScrollview 填充 NSWindow,自定义 NSView 填充 NSScrollview。

当自定义 NSView 发送 awakeFromNib 方法时,它的边界是 0,0 和 256x373,正如我所期望的那样,填充滚动视图。

但是后来我将 NSView 的大小更改为大于 373high 但它永远不会更改滚动视图中的大小。我试过设置框架,我试过设置界限,但没有任何改变。

除了,当我尝试更改自定义 NSView 的intrinsicSize 时,它​​确实发生了变化,但是它使 NSWindow 和 NSScrollview 的大小也发生了变化,以适应新的 256x1452 大小

谁能告诉我哪里可能出错了?这与在 Scrollview 或 NSView 上设置的约束有关吗?我没有设置,但是当我在 Interface Builder 中添加项目时,它们会自动为我添加

[编辑]

我已经对其进行了更改,以便以编程方式创建自定义 NSView 并使用 setDocumentView 添加到 NSScrollView:并且一切都按我的预期工作。所以我想从技术上讲我已经解决了这个问题,但如果有人知道,我仍然想解释为什么它不能通过 Interface Builder 工作。

4

1 回答 1

1

我有一个部分解决方案,这也让我提出了一个额外的问题。我有一个类似的问题,我需要以编程方式更改嵌入在 NSScrollView 中的视图的大小。

此代码有效,需要两种方法

-(void)markViewSizeChanged /* Works correctly */
{
    [self setFrameSize:currentViewSize];
    [self setBoundsSize:currentViewSize];
    [self setNeedsDisplay:YES];
}


-(NSSize)intrinsicContentSize // Override of class method
{
    return currentViewSize;
}

注意:必须在 awakeFromNib 中设置 currentViewSize

现在是好奇的部分。如果我颠倒设置框架和边界的两个调用的顺序,嵌入视图的大小是正确的,但绘制的对象的缩放因子是关闭的。

-(void)markViewSizeChanged /* DOES NOT work correctly, scaling in drawing off */
{
    [self setBoundsSize:currentViewSize];
    [self setFrameSize:currentViewSize];
    [self setNeedsDisplay:YES];
}
于 2014-05-03T01:43:53.787 回答