【问题标题】:CGRectMake putting my UIButton in the wrong locationCGRectMake 将我的 UIButton 放在错误的位置
【发布时间】:2013-07-05 12:13:25
【问题描述】:

当我在我的程序中使用 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)。

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

【问题讨论】:

  • 实际运行应用时是否会出现导航栏? (顶部的栏显示您拥有的服务时间和数量等)
  • 您显示图片的尺寸检查器是来自一个移动的按钮,还是包含它们的视图,还是留在同一位置的左上角按钮之一?
  • @AlbertRenshaw 在 IB 中或运行时没有导航栏或状态栏。
  • @Inafziger 我展示的尺寸检查器是移动的按钮。视图的尺寸检查器基本相同,但自动尺寸支柱(我认为这就是他们所说的)是左上而不是左和右。所有其他按钮都与我发布的图片相同。
  • @fiorgodx 我会在您的 .m 文件中进行搜索并查找 (cmd+f) 以查看您是否在其他任何地方移动按钮 .center = CGPointMake ... .frame = CGRectMake 。 .. 只是self.theButton

标签: ios interface-builder cgrectmake


【解决方案1】:

查看您如何在 IB 中读取坐标 w.r.t 原点。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 自动布局未开启,我将使用该信息编辑原始帖子。
    • 框架似乎不正确,请查看我的新编辑与我的 NSLog 结果的比较。
    • 你能给我发一张你的尺码检验员的照片吗?
    【解决方案3】:

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

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

    【讨论】:

    • 顺便说一句,这是在 iPad 上。问题是,IB 并没有将视图移动到错误的位置,当程序加载时一切看起来都很好。直到我以编程方式更改按钮的位置,事情才显得格格不入。问题是程序(通过 NSLog)如何解释坐标。在 IB 中它看起来很棒,程序运行时看起来不错,但是我知道一个按钮的 y 值为 388,程序告诉我它的 y 值为 541。它说窗口的边界是 1024x768,但是当我检查原点 y = 768 的按钮的 y 值,表示它的 y 是 1071。
    • 你在 IB 和 iPad 上的方向是一样的吗?即,无论是横向还是非纵向?
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 2018-03-25
      • 2013-05-25
      • 2020-10-16
      • 1970-01-01
      相关资源
      最近更新 更多