iOS-控件在设备上的坐标不正确

iOS-控件在设备上的坐标不正确,ios,ios8,Ios,Ios8,我有一个带有一些控件的视图,在使用坐标时遇到问题 所有这些代码都在-voidViewWillDisplay:BOOLanimated中执行 以及日志输出: Screen - x: 0.000000 y: 0.000000 width:320.000000 height:568.000000 View - x: 0.000000 y: 0.000000 width:320.000000 height:568.000000 Nav Bar - x: 0.000000 y: 8.0

我有一个带有一些控件的视图,在使用坐标时遇到问题

所有这些代码都在-voidViewWillDisplay:BOOLanimated中执行

以及日志输出:

Screen  - x:  0.000000 y:  0.000000 width:320.000000 height:568.000000
View    - x:  0.000000 y:  0.000000 width:320.000000 height:568.000000
Nav Bar - x:  0.000000 y:  8.000000 width:600.000000 height: 44.000000
Button  - x:246.000000 y:542.000000 width: 50.000000 height: 50.000000
不太确定导航栏如何比设备宽,或者按钮y坐标如何超出屏幕底部:542+50>568,但整个按钮确实会显示在设备屏幕上

导航栏和按钮坐标似乎是从Interface Builder中的值中提取出来的,但在实际设备上运行时,它们显然是不正确的

在屏幕上放置一些通过编程创建的项目时,这些不正确的值确实会给我带来问题


我遗漏了什么或做错了什么?

我猜您使用的是尺码等级。
使用尺寸类别时必须使用自动布局

您的约束可能不够正确,无法保持这些控件的正确布局

查看“下一个到最后一个”按钮两个重叠的矩形,这是“调试视图层次结构”按钮。在窗口中加载视图后,可以单击此按钮调试视图层次结构。在视图层次结构中,可以看到控件放置的位置,然后可以找出位置的错误


然后,您可以使用约束来获得正确的位置。

显然,当调用ViewDiLoad或ViewWillooke时,视图没有布局


在viewDidLayoutSubviews中访问帧返回了正确的值。

据我所知,是自动布局导致了这些问题。您需要向这些控件添加约束,以便在呈现UI时识别它们的正确位置。我正在使用约束,没有收到任何关于它们的投诉。您可以在xcode 6中中断视图,并在运行时获取有关视图中元素布局的更多信息。不太确定您在谈论什么。需要详细说明吗?我正在为所有控件使用自动布局。执行代码时,我不会收到任何有关约束问题的消息,编辑时也不会显示任何警告。只有当您没有添加足够的约束或添加过多的约束时,才会报告问题。使用live view调试器确保生成的帧不超出范围。这很有帮助,但不是问题所在,尽管知道这对将来很有用。谢谢
Screen  - x:  0.000000 y:  0.000000 width:320.000000 height:568.000000
View    - x:  0.000000 y:  0.000000 width:320.000000 height:568.000000
Nav Bar - x:  0.000000 y:  8.000000 width:600.000000 height: 44.000000
Button  - x:246.000000 y:542.000000 width: 50.000000 height: 50.000000