2010-03-30 73 views
0

我有这个iPhone用户界面开发的慢性问题,其中视图有时似乎出现在屏幕上的位置不同于他们的框架属性报告的位置。下面是我在做什么,以尝试调试问题:iPhone用户界面布局调试

UIView *currentView = self.view; 
while (currentView!=nil) 
{ 
    NSLog(@"frame: %f,%f,%f,%f", currentView.frame.origin.x, 
           currentView.frame.origin.y, 
           currentView.frame.size.width, 
           currentView.frame.size.height); 
    currentView = currentView.superview; 
} 

预计这应该告诉我每一个元素了从给定的视图到应用程序的根的UIWindow元素层次的坐标和大小,每个元素相对于其父元素的坐标。但是,情况似乎并非如此。在我目前的情况下,我有一个用户界面,我试图调试其他时间旋转设备的位置,整个UI向上或向下移动20像素,但上面的代码块每次报告完全相同的数字。我试着在第二次延迟之后调用上面的代码,但是每次数字仍然是相同的。

有谁知道更好的方式来检查UI元素的屏幕坐标?如果我能够检测到什么时候出现问题,我可以在问题出现时予以补偿。

+0

只是想提一下,这20px偏移问题发生在'每隔一个旋转',因为它只会发生在UIInterfaceOrientationLandscapeLeft和UIInterfaceOrientationPortrait(而不是LandscapeRight或PortraitUpsideDown)。一开始我并没有想到,这两幅风景画和两幅肖像将如何布置,真的会有所不同。一旦我意识到这一点,我就可以弥补这个问题......尽管我仍然不知道为什么会出现这种情况。 – Cruinh 2010-03-31 19:46:37

回答

1

有些事情你可以尝试一下:

  • 不是滚动你自己的,你可以使用的UIViewrecursiveDescription方法(无证,但伟大工程)。 (Reference
  • 将您的代码更改为NSLog使用四种方法称为convert {Point,Rect}:{to,from} View :.例如,在您的应用程序窗口中拨打convertRect:fromView:,从子视图中传递一堆帧。

我以前也有一个怪异的20像素的错误。我从来没有100%解决了这个问题,但我有两个想法,可以帮助:你正在你的window对象calleding makeKeyAndVisible首次启动您的应用程序时

  • 仔细检查。如果你的窗口没有设置为“关键”,那么一些微妙的奇怪的事情可能会做错。
  • 尝试在调整帧大小并重置它时尝试在代码中找到该点。您可能必须使用performSelector:withObject:afterDelay:方法在之后将其重置为,操作系统会为您解决这个问题。请查看this post on NSRunLoop了解该方法为何有用的更多详细信息。