2012-06-21 61 views
0

我想添加一個子視圖到一個特定的視圖(壞視圖),它總是出現一點點的權利,我想要它(屏幕上的x值不同)。子視圖顯示在不同的地方在兩個視圖與相同的框架和超級視圖

但是,我注意到,當我將此子視圖添加到不同的視圖(良好視圖)時,它被放置在正確的位置。

錯誤視圖和良好視圖是同一視圖的子視圖並具有相同的框架(良好視圖是滾動視圖中的可縮放視圖,而錯誤視圖是不縮放的疊加視圖)。

我運行下面的代碼:

view.frame = [[self tiledScrollView] tileContainerView].frame; 

if ([[[self tiledScrollView] tileContainerView] superview] == [view superview]) 
{ 
    NSLog(@"SAME SUPERVIEWS"); 
} 

[[self tiledScrollView] tileContainerView].frame = view.frame; 

NSLog(@"FRAME FOR VIEW THAT DISPLAYS INCORRECTLY: %f, %f, %f, %f, \n FRAME FOR VIEW THAT DISPLAYS CORRECTLY: %f, %f, %f, %f", view.frame.origin.x, view.frame.origin.y, view.frame.size.width, view.frame.size.height, [[self tiledScrollView] tileContainerView].frame.origin.x, [[self tiledScrollView] tileContainerView].frame.origin.y, [[self tiledScrollView] tileContainerView].frame.size.width, [[self tiledScrollView] tileContainerView].frame.size.height); 

緊接着又是我的子視圖添加爲[[自我tiledScrollView] tileContainerView(好景)或查看(糟糕的看法)。

在良好的視圖中,標籤出現在我想要的位置。在錯誤視圖中,標籤顯示在右側一點。

從上面的代碼的輸出是:

SAME SUPERVIEWS

幀查看顯示不正確:0.000275,0.000000,983.999451,648.282349, 幀查看顯示正確:0.000293,-0.000003, 983.999390,648.282349

因此,他們實際上沒有完全相同的幀(儘管我將它們設置爲等於之前),但它們非常接近,並且唯一可能與rounding發生差異的地方是origin.y值,但應用程序運行時的差異是i n origin.x值。

我已經浪費了這麼多時間試圖弄清楚這一點,這樣有利於將不勝感激

回答

0

視圖的frame是其超視圖座標系中的邊界矩形。有一件事可能正在發生的是壞視圖和良好視圖在它們自己的座標系統中不同。這很容易解釋爲什麼你的子視圖會在屏幕上的不同位置出現。一個簡單的方法來檢查將是爲每個視圖記錄bounds而不是framebounds爲您提供視圖在其自己的座標系中的邊界矩形 - 如果它們不相同,則可以找到問題的原因。

+0

啊哈!界限確實不同。謝謝你,這是非常有幫助的。 –

0

嘗試,而不是

[[self tiledScrollView] tileContainerView].frame = view.frame; 

[[self tiledScrollView] tileContainerView].frame.origin.x = view.frame.origin.x; 
[[self tiledScrollView] tileContainerView].frame.origin.y = view.frame.origin.y; 
[[self tiledScrollView] tileContainerView].frame.size.width = view.frame.size.width; 
[[self tiledScrollView] tileContainerView].frame.size.height = view.frame.size.height; 

或逆轉,因爲我看到,從您的輸出,輸出顯示view.frame是不正確的:

view.frame.origin.x = [[self tiledScrollView] tileContainerView].frame.origin.x; 
view.frame.origin.y = [[self tiledScrollView] tileContainerView].frame.origin.y; 
view.frame.size.width = [[self tiledScrollView] tileContainerView].frame.size.width; 
view.frame.size.height = [[self tiledScrollView] tileContainerView].frame.size.height; 
相關問題