2010-03-30 110 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瞭解該方法爲何有用的更多詳細信息。