3

当我在我的程序中使用CGRectMake时,它​​的行为非常奇怪。在 Interface Builder 中,我的按钮的坐标为(260, 388)并且始终处于纵向模式。当我输入以下代码(只是为了实验)时,它应该保持在同一个地方,X 值很好,但 Y 值把它放在一个更像 300 的位置。

self.theButton.frame = CGRectMake(260, 388, 120, 120);

CGRectMake 中是否有一些怪癖导致坐标变得扭曲?没有其他代码行会影响此按钮的大小或形状,当我注释掉此行时,按钮位于 IB 的正确位置。

编辑:自动布局未打开。编辑:问题似乎是我的代码对框架 Y 值的概念和 IB 的概念不匹配。

按钮 1.1 到 3.2 在这里按从上到下的顺序列出。根据 IB,按钮编号后的第一个数字是它们的(正确)Y 值。第二个数字是根据 NSLog 的 button.frame.origin.y 的 Y 值。最后一个数字是差异。差异呈指数增长,每次增加 50 或 51。这显然是问题所在,我正在使用 IB 的 y 值系统设置我的 CGRectMake,但代码使用了一些其他数字作为 Y 值。关于为什么的任何想法?

按钮 -> IB Y 值 -> NSLog Y 值 -> 差异

1.1 -> 4 -> 5 -> 1

1.2 -> 132 -> 184 -> 52

1.3 -> 260 -> 362 -> 102

3.1 -> 388 -> 541 -> 153

3.2 -> 516 -> 719 -> 203

编辑:我的尺码检查员:

尺寸检查器

这里的第一张图片是我的 IB 的一部分(正确)。第二张图片是当我运行程序时,您会看到一个 Item 按钮与放大镜重叠(忽略低 alpha)。

IB更正 程序不正确

编辑:经过进一步试验,似乎使用 CGRect 来移动 UIViews 工作得很好,除了在 viewDidLoad 中使用它时。我将代码移动到 viewDidAppear 并且它现在可以工作了。不知道为什么会发生这种情况,但确实如此。结束这个问题。

4

4 回答 4

0

我有同样的问题。尝试关闭自动布局。它对我有用!

于 2013-07-05T12:38:32.397 回答
0

经过进一步的试验,似乎使用 CGRect 来移动 UIViews 工作得很好,除了在 viewDidLoad 中使用它时。我将代码移动到 viewDidAppear 并且它现在可以工作了。不知道为什么会发生这种情况,但确实如此。结束这个问题。

于 2013-07-06T20:43:36.333 回答
0

看看你是如何在 IB 中读取坐标原点的。

在此处输入图像描述 在此处输入图像描述

于 2013-07-05T12:31:13.327 回答
0

由于您的每个按钮都在屏幕下方逐渐向下,因此看起来在包含您的按钮的视图上选择了“自动调整子视图大小” ,并且正在拉伸到更大的高度。

这可能是因为在 IB 中,您在 iPhone 4 上进行布局,而您正在测试的模拟器/实际设备是 iPhone 5。对于视图更改大小还有其他解释,但这很可能。

于 2013-07-05T15:57:23.357 回答