相同的命令,不同的结果setFrame:NSView

时间:2012-02-09 01:12:07

标签: objective-c cocoa nsview nswindow

我正在经历我认为是一个非常奇怪的问题。

首先,我的应用程序使用以下示例命令在屏幕上移动UI元素:

    [view setFrame:NSRectFromCGRect(CGRectMake(0, 0, 0, 0))]; 

我允许用户使用此命令将应用程序的NSWindow调整为另一个大小:

    [self.window setFrame:NSRectFromCGRect(CGRectMake(0, 0, 0, 0)) display:YES animate:YES];

当处于“调整大小模式”时,我显然会将每个setFrame命令更改为适当的坐标系。

然而,存在一个问题:当(如果)用户通过再次单击按钮切换回原始NSWindow大小,并且应用程序再次执行UI移动时,移动的视图不在该位置他们应该在。

澄清一下:我的UI移动代码在正常模式或调整大小模式下一遍又一遍地运行良好。但是,如果我从一个切换到另一个,则会移动一些项目(不是全部)。

可能导致这种奇怪行为的原因是什么?我使用相同的命令(在每个屏幕分辨率内),NSLogs确认UI元素位于我指定的位置;但是,这个位置显然不是我试图迁移的位置。

有没有人在这里遇到过类似的问题?

2 个答案:

答案 0 :(得分:1)

您可能在Interface Builder中设置了某种自动调整模板,这会干扰您的手动展示位置。进入笔尖并移除“尺寸”检查器中的所有弹簧和支柱。虽然如果可能,您应该让自动调整处理放置,或者移动到10.7中引入的自动布局。

答案 1 :(得分:0)

经过几天和几天的尝试,我得出以下结论:调整大小的代码根本无效。

我在调整窗口大小后使用NSLog确认了这一点。最后,我通过在传统setFrame:方法之后添加以下行来更改调整大小代码:

    [self.window setContentSize:NSSizeFromCGSize(CGSizeMake(desiredWidth, desiredHeight))];