windowWillResize移动窗口的原点

时间:2012-11-06 17:23:28

标签: cocoa nswindow

我目前正在使用windowWillResize来控制我的一个窗口的纵横比与其中一个窗口的关系。一切似乎工作得很好,除了调整窗口大小也垂直移动,只是稍微调整,每次调整大小。使用setContentAspectRatio不会产生这个,但这对我来说不是一个选项,因为我在窗口中有其他视图。

关于为什么窗户可能会移动的任何想法,更重要的是,如果它是可以预防的?这是代码:

- (NSSize)windowWillResize:(NSWindow *)sender toSize:(NSSize)frameSize
{
    NSRect windowFrame = [self.window frame];
    NSRect viewRect = [self.screen convertRect:[self.screen bounds] toView: nil];
    NSRect contentRect = [self.window contentRectForFrameRect:windowFrame];

    float marginY = viewRect.origin.y + windowFrame.size.height - contentRect.size.height;
    float marginX = contentRect.size.width - viewRect.size.width;

    frameSize.height = (frameSize.width - marginX) * HEIGHT_DEFAULT / WIDTH_DEFAULT + marginY;

    return frameSize;
}

1 个答案:

答案 0 :(得分:0)

我通过更改'frameSize'的宽度而非高度来修复此问题:

frameSize.width = (frameSize.height - marginY) / (HEIGHT_DEFAULT / WIDTH_DEFAULT) + marginX;

如果窗口缩小到负大小,这会产生一个奇怪的窗口调整大小的工件,但设置最小大小限制会修复它。