NSScrollview中的NSView不会改变大小

时间:2012-08-29 22:27:18

标签: cocoa nsview nsscrollview

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

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

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

但是后来我将NSView的大小更改为大于373high,但它永远不会改变scrollview中的大小。 我已经尝试设置框架,我已经尝试设置边界,但没有任何改变。

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

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

[编辑]

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

1 个答案:

答案 0 :(得分:1)

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

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

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