1

我正在学习为 iPhone 开发(以编程方式,我不喜欢 IB)。我只将 IB 用于事物的框架,所以我在 IB 中进行设计,但仅使用它来检查每个控件的框架。我非常困惑的是 UIView 的框架。首先,如果不实现loadView在视图控制器中,它会自动创建一个空的 UIView(我注意到它是黑色的)并将其分配给 self.view,对吗?框架呢?它会自动找出框架应该是什么吗?我的意思是,它需要根据是否有状态栏、是否有标签栏、工具栏、方向而有所不同。在我的标签栏应用程序中,似乎无论我设置的 uiview 框架是什么,它看起来仍然很好。而且,UIView 的框架在 IB 中似乎搞砸了。就像一个 UIView 占据整个窗口(除了状态栏)的 y 值是 0,当它应该是 20 时,因为状态栏占据了前 20 个像素。在 IB 中,标签栏控制器中的视图的 y 值为 411,即使它是从状态栏下方开始的。每当我 NSLog 一个帧(四个数字,view.frame.origin.x,view.frame...等 ) x, y, width 和 height 总是 0.. 有懂的人可以给我解释一下吗?谢谢!!

好的,这很奇怪......这个:

CGRect test = CGRectMake(0, 20, 320, 460);
NSLog(@"%d %d %d %d", test.origin.x, test.origin.y, CGRectGetWidth(test), CGRectGetHeight(test));

给出输出:

0 0 0 1077149696

???那是怎么回事?

4

3 回答 3

5

首先你应该注意的是 CGRect 的 origin 和 size 成员使用 float,所以在你的 NSLog 语句中你需要使用 %f,而不是 %d。例如,

NSLog(@"%f %f %f %f", test.origin.x, test.origin.y, test.size.width, test.size.height);
于 2009-08-13T02:05:42.153 回答
0

回答:IB 并不总是显示正确的原点/位置坐标,而且有些东西,比如 UITabBarController,会调整视图的大小,使其成为他们想要的样子,无论您设置什么。

于 2009-08-21T02:50:03.103 回答
0

像素大小是浮动的,因为在桌面上进行缩放时需要精确的数学计算并希望支持比例大小。如果您坚持使用整数并且窗口大小扩大了 1.2 倍,那么整数舍入会使事情变得不合时宜。他们在 iPhone 上保留了相同的内容,因为您可以拥有自动调整大小的子视图,并且浮动提供了对大小和位置的更多控制。

至于视图位置,如果您进入 IB 并选择一个视图并检查“视图属性”检查器,您会看到其中一个选项是显示“模拟界面元素”。默认情况下,它启用了状态栏(灰色),并允许其在界面中的高度。如果您检查检查器中的尺寸选项卡,则视图高度实际上设置为 460(允许 20 像素状态栏)。

您可以选择包含顶栏或底栏,它会通过为您调整内容高度来“模拟”它们。这只是一个定位模拟,因此您可以布置控件。在运行时,假设您将视图加载到正确的视图控制器中,该控制器将具有正确的 chrome,因此它应该看起来都正确。

有很多 IB 号码用于相对定位。当您将视图添加到导航控制器或选项卡视图时,此视图将成为这些父视图的子视图,并且默认情况下它们会自动调整子视图的大小。因此,如果您已经“模拟”了 IB 中的那个顶部栏,那么您的控件都应该正确排列并流入正确的位置,并且您应该看到您所期望的(当然,取决于您的子视图最终的父控件作为一个孩子)。

顺便说一句,由于不使用 IB 连接控件并将它们连接到 IBOutlets,您会错过很多便利。它确实有助于消除大量的手动工作和额外的代码。这就像超人拒绝使用他的 X 射线视力,而是决定穿墙:-)

于 2009-08-18T18:50:50.063 回答