我在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工作。
答案 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];
}