Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 相同的命令,不同的结果setFrame:NSView_Objective C_Cocoa_Nsview_Nswindow - Fatal编程技术网

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

Objective c 相同的命令,不同的结果setFrame:NSView,objective-c,cocoa,nsview,nswindow,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]; 在“调整大小模式

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

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

    [view setFrame:NSRectFromCGRect(CGRectMake(0, 0, 0, 0))]; 
我允许我的用户使用以下命令将应用程序的NSWindow调整为另一个大小:

    [self.window setFrame:NSRectFromCGRect(CGRectMake(0, 0, 0, 0)) display:YES animate:YES];
在“调整大小模式”中,我显然会将每个
setFrame
命令更改为适当的坐标系

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

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

是什么导致了这种奇怪的行为?我使用的是相同的命令(在每个屏幕分辨率内),NSLOG确认UI元素位于我指定的位置;然而,这个地方显然不是我想要搬到的地方


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

您可能在Interface Builder中设置了某种自动调整大小的掩码,这会干扰您的手动放置。进入你的笔尖,移除尺寸检测仪中的所有弹簧和支柱。虽然如果可能的话,您应该让自动调整大小来处理放置,或者转到10.7中引入的自动布局。

经过几天的努力,我得出了以下结论:调整大小的代码根本不起作用

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

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

那是可能的,我得检查一下。但是,我正在使用自动调整大小,但是在调整窗口大小后,我仍然必须移动对象。那么,这是否意味着我应该完全取消自动调整大小,只使用setFrame而不是自动调整大小?如果需要手动放置所有对象,关闭自动调整大小将简化调试(如果没有其他功能的话)。