我偶尔需要通过编程方式更改NSView的尺寸。为此,有助于获取各个视图的尺寸,相对调整它们,然后使用setFrame:重新定位。
问题在于,从我的角度来看,frame方法通常返回明显错误的NSRects。
我有一个在Interface Builder中设置了NSPanel并与我的主程序建立了各种连接的程序。为了测试frame返回的NSRects,我在应用程序的awakeFromNib:方法中打开了面板,检索了一些NSRects,并将它们打印到控制台。
这是我的awakeFromNib:
- (void)awakeFromNib {
NSLog(@"in awakeFromNib");
[self showPrefsSheet:self]; //this is the prefs sheet with the controls of interest
//note that it does indeed pop up and is displayed
originalFrame = [aTextView frame];
NSLog(@"the frame is %d, %d, %d, %d", originalFrame.origin.x, originalFrame.origin.y, originalFrame.size.width, originalFrame.size.height);
originalFrame = [aButton frame];
NSLog(@"the frame is %d, %d, %d, %d", originalFrame.origin.x, originalFrame.origin.y, originalFrame.size.width, originalFrame.size.height);
return;
}
这段代码的结果在控制台中看起来是这样的:
in awakeFromNib
the frame is 0, 0, 0, 0
the frame is 0, 1079230464, 0, 1078329344
请注意:(i)屏幕上显示了面板和两个控件;(ii)我确信插座已正确连接,因为我可以通过编程对控件进行操作并使它们正常工作;(iii)界面构建器在“大小和位置”下的检查器中显示了正确的框架大小。
简而言之,程序的其他方面都完美运行。实际上,似乎框架尺寸未正确设置或出现了其他问题。
有人能告诉我如何检索真实的框架信息吗?或者至少解释一下我看到的结果是什么?