0

我遇到了调整大小的问题,我认为这是因为我对框架和边界的了解不够。

我在滚动视图中有一个自定义视图,它填充了窗口。当我调整窗口大小时,我希望自定义视图保持原样,在鼠标拖动的地方慢慢被窗口覆盖/揭开。

真正发生的是自定义视图保持锚定在滚动视图的左下角,因此如果我使窗口变短,自定义视图会向上滑动以保持其左下角接触滚动视图角。

如何在不移动特定视图的情况下调整窗口大小?

4

2 回答 2

1

frame是视图将在其父级中占据的区域。这bounds是将在其框架内绘制的视图部分。因此,在 99.99% 的情况下,两者完全不同,它们相同size,但边界的原点为零,而框架的原点为非零。

也就是说,这听起来更像是您对坐标系感到困惑。OS X 遵循坐标纸约定,原点位于屏幕的左下边缘。因此,您的滚动视图的原点位于窗口的左下角,这导致该点成为您调整大小时的锚点。滚动视图的框架和边界的大小会发生变化,但原点不会。

假设您希望左上角而不是左下角(?),可能最简单的事情是子类化NSScrollView并覆盖- setFrame:以进行适当的算术 - 获取 current documentVisibleRect,计算左上角的内容,允许super设置然后scrollToPoint适当地调用新框架。

于 2012-09-25T05:47:53.377 回答
1

如果要将文档视图固定在左上角,可以isFlipped在文档视图中覆盖以 return YES。在这种情况下,y 坐标将被翻转,您可能需要执行一些计算调整。

- (BOOL)isFlipped
{
    return YES;
}
于 2012-10-21T22:26:26.427 回答