【问题标题】:NSView inside NSScrollview won't change sizeNSScrollview 内的 NSView 不会改变大小
【发布时间】:2012-08-24 14:53:40
【问题描述】:

我在 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 工作。

【问题讨论】:

    标签: cocoa nsview nsscrollview


    【解决方案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];
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-31
      • 1970-01-01
      • 2015-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多