我遇到了调整大小的问题,我认为这是因为我对框架和边界的了解不够。
我在滚动视图中有一个自定义视图,它填充了窗口。当我调整窗口大小时,我希望自定义视图保持原样,在鼠标拖动的地方慢慢被窗口覆盖/揭开。
真正发生的是自定义视图保持锚定在滚动视图的左下角,因此如果我使窗口变短,自定义视图会向上滑动以保持其左下角接触滚动视图角。
如何在不移动特定视图的情况下调整窗口大小?
这frame
是视图将在其父级中占据的区域。这bounds
是将在其框架内绘制的视图部分。因此,在 99.99% 的情况下,两者完全不同,它们相同size
,但边界的原点为零,而框架的原点为非零。
也就是说,这听起来更像是您对坐标系感到困惑。OS X 遵循坐标纸约定,原点位于屏幕的左下边缘。因此,您的滚动视图的原点位于窗口的左下角,这导致该点成为您调整大小时的锚点。滚动视图的框架和边界的大小会发生变化,但原点不会。
假设您希望左上角而不是左下角(?),可能最简单的事情是子类化NSScrollView
并覆盖- setFrame:
以进行适当的算术 - 获取 current documentVisibleRect
,计算左上角的内容,允许super
设置然后scrollToPoint
适当地调用新框架。
如果要将文档视图固定在左上角,可以isFlipped
在文档视图中覆盖以 return YES
。在这种情况下,y 坐标将被翻转,您可能需要执行一些计算调整。
- (BOOL)isFlipped
{
return YES;
}