强制窗口仅在一个边缘调整大小 - OSX Lion

时间:2012-09-18 18:29:50

标签: objective-c nswindow window-resize

正如您在10.7中所知,用户可以从各个角落调整窗口的大小。有没有办法限制NSWindow的大小仅限于一方?使用setMinSize:setMaxSize:并不会做任何事情:通过使用那些,您只能限制调整两个方面,而不是一个。

3 个答案:

答案 0 :(得分:2)

要修复光标,请使用NSWindow子类的mouseMoved事件跟踪鼠标位置。当它接近顶部时,调用setMinSize = setMaxSize =窗口的大小。当鼠标靠近底部而不是顶部时,将最小尺寸和最大尺寸更改回用户可以按照您希望的方式调整尺寸的任何尺寸。

请注意,只要窗口具有焦点,无论鼠标是在窗口内还是在窗口外(至少在我的测试中),都会调用mouseMoved。但要实现这一点,首先在NSWindow子类中实现-(BOOL) acceptsMouseMovedEvents { return YES; }

作为额外的安全措施,您可以拦截并阻止在NSWindowDelegate中使用windowWillResize(不是windowDidResize)调整大小的任何尝试。来自Apple文档:

  

-(NSSize)windowWillResize:(NSWindow *)sender toSize:(NSSize)frameSize

     

...

     

frameSize包含调整大小(屏幕坐标)的大小。要调整大小到不同的大小,只需从此方法返回所需的大小; 以避免调整大小,返回当前大小。调用此方法时,已经应用了发送方的最小和最大大小约束。

答案 1 :(得分:0)

实施- (void)windowDidResize:(NSNotification *)notification并恢复以前保存的窗口框(如果它从错误的一侧调整大小)。

答案 2 :(得分:0)

任何操作系统上的窗口大小调整行为都不是您的业务。你要么支持窗口大小调整,要么你不支持。除了支持或不支持之外,它不是你的号召。用户更愿意这样做。

作为一个附录,没有任何正当的方法来做你想要的......设计。