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