2011-12-13 66 views
41

邊界和幀之間有什麼區別?事實上,爲什麼「界限」甚至存在? 「邊界」的大小等於框架的大小,邊界的原點應始終爲0,0。NSView的邊界vs幀

+1

可能重複[可可:框架和邊界之間的區別是什麼?](http://stackoverflow.com/questions/1210047/cocoa-whats-the-difference-between-the-frame-and-the -bounds) – daisy 2016-05-08 03:16:15

回答

90

View and Window Architecture編程指南爲iOS:

一個視圖對象使用其幀,邊界, 和中心性能跟蹤其尺寸和位置:

屬性包含框架矩形,它在其超級視圖的座標系統中指定視圖的大小和位置 。

範圍屬性包含視圖自身的本地 座標系中的邊界矩形,它指定 大小視圖(及其內容來源)。

center屬性包含 superview座標系中視圖的已知中心點。

這裏是一個解釋一個很好的可視化:

enter image description here

+7

正確。看到我的問題。邊界對於原點始終是0,0,並且尺寸是相同的。那麼爲什麼還有界限,因爲框架包含了所有界限的信息呢? – David 2011-12-13 23:04:30

8

在第一個答案不包括旋轉爲橫向後會發生什麼變化框架和邊界蘋果文檔。所以爲了更加完整,你應該知道窗口的框架和根視圖在旋轉後不會改變,但是邊界是這樣的。 See this article瞭解更多細節,並小心使用框架作爲縱向方向以外的任何參考。

從文章:

如果您的視圖控制器具有頂級的非窗口視圖(即,它是 最底層的視圖控制器),然後

self.frame 

總是縱向。世界衛生大會?是的,總是在肖像 - 你的看法的變化是什麼變化。所以,你的

self.bounds 

總是準確的(記住最後一點),但

self.frame 

可能會或可能不會給寬高比的用戶真正看到, 因爲每個視圖的框架是根據監視的 座標報告,並考慮應用到 視圖的任何轉換。

9

邊界的起點並不總是0,0。如果您在滾動過程中觀察UIScrollView的更改界限屬性,很容易理解框架和邊界之間的區別。

例如,您具有帶有幀(0,0,320,460),邊界(0,0,320,460)和ContentSize(640,460)的UIScrollView。其幀總是(0,0,320,460),但邊界的X座標將根據滾動距離而變化。

如果你想改變你的內容可能很有用UIScrollView(例如,動態地創建和刪除頁面),所以你想知道滾動的距離。

1

視圖框架是它可以完全適合的矩形的大小。它總是看起來好像邊界和框架是相同的,但事實並非如此。 考慮一個剛旋轉大約45度的方形!

這裏這個旋轉的正方形的框架將是完全填充它的矩形,因此它將與此對象的邊界不同。

P.S主要是在旋轉的對象框架和邊界往往不同。