Frame vs. Bounds

在 iOS 中 frame 跟 bounds 的概念很容易使人混淆,這篇文章將以實際例子舉出兩者之間的差別。

首先讓我們來了解 iOS 的座標系,iOS 的座標系與一般的笛卡爾座標系(Cartesian coordinate system)不同,其 y 軸是向下為正,如下圖

macOS與iOS的座標系https://developer.apple.com/library/content/documentation/General/Conceptual/Devpedia-CocoaApp/CoordinateSystem.html

接下來讓我們從 frame 開始了解

frame: 該 subView 在 parentView 的座標系中的位置與大小

BlueViewframe: X:67.0 Y:77.0 Width: 240.0 Height:128.0

從上圖可以看到,藍色的 view 以白色的 view 為基準點,決定自己的位置,而通過修改藍色 view 的 frame 的 x, y 數值可以改變藍色 view 在白色 view 的位置。

接下來是 bounds,bounds 的定義是
subView 在自己的座標系統中的位置和大小 (參照點是自己的座標系統,以左上角0,0為起點) 。

我們在藍色的 view 上面新增一個 customView 其表現如下

customViewframe: X:0.0 Y:0.0 Width: 40.0 Height:40.0

接下來讓我們改動 blueView 的 bounds 值

blueViewbounds: X:-10.0 Y:-10.0 Width:240.0 Height:128.0

設定 blueView 的 bounds 會使 customView 的位置偏移,這是因為 blueView把自己的原點改動變成從 (-10,-10) 開始,而 customView 依舊是參照blueView的 (0,0) 所以 customView 就往右下偏移了。

隨文附上這段簡短的程式碼:https://github.com/yfde11/FrameVSBounds.git

Show your support

Clapping shows how much you appreciated MichaelXiao’s story.