我偶尔想以编程方式更改 NSView 的尺寸。为此,获取各种视图的尺寸,相对于彼此调整它们,然后使用 setFrame: 重新定位是有帮助的。
问题在于,从我的角度来看,frame 方法通常会返回明显错误的 NSRect。
我有一个在 Interface Builder 中设置了 NSPanel 的程序,并与我的主程序建立了各种连接。为了测试帧返回的 NSRect,我在应用程序的 awakeFromNib: 方法中打开了面板,检索了一些 NSRect,并将它们打印到控制台。
这是我的 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) 界面生成器在“尺寸和位置”下的检查器中显示正确的帧尺寸。
简而言之,该程序的其他所有内容都运行良好。实际上似乎框架尺寸设置不正确或其他什么。
有人可以告诉我如何检索真实的帧信息吗?或者至少解释一下我看到的结果?