如您所知,在 10.7 中,用户可以从各个角度调整窗口的大小。有没有办法将 NSWindow 的大小调整限制在一侧?使用setMinSize:
并且setMaxSize:
不会做所有事情:通过使用这些,您只能将调整大小限制在两侧,而不是一侧。
3 回答
mouseMoved
要固定光标,请使用NSWindow 子类的事件跟踪鼠标位置。当它接近顶部时,调用 setMinSize = setMaxSize = 窗口大小。当鼠标更靠近底部而不是顶部时,将最小尺寸和最大尺寸更改回任何可以让用户按照您希望的方式调整大小的值。
请注意,只要窗口具有焦点,无论鼠标是在窗口内还是在窗口外(至少在我的测试中),都会调用 mouseMoved。但是要让它工作,首先-(BOOL) acceptsMouseMovedEvents { return YES; }
在你的 NSWindow 子类中实现。
作为额外的保护措施,您可以在 NSWindowDelegate中拦截并阻止任何使用windowWillResize
(not ) 调整大小的尝试。windowDidResize
从苹果文档:
-(NSSize)windowWillResize:(NSWindow *)sender toSize:(NSSize)frameSize
...
frameSize 包含发送方将被调整到的大小(在屏幕坐标中)。要调整到不同的大小,只需从此方法返回所需的大小;为避免调整大小,请返回当前大小。调用此方法时,已应用发送方的最小和最大大小约束。
- (void)windowDidResize:(NSNotification *)notification
如果从错误的一侧调整大小,则实施并恢复以前保存的窗口框架。
任何操作系统上的窗口大小调整行为都不是你的事。您要么支持调整窗口大小,要么不支持。除了支持与否之外,这不是你的决定。用户会更喜欢你这样做。
作为附录,没有像样的方法来做你想做的事……按设计。