This article is a repost of an answer I wrote on Stack Overflow.
Short description
- frame = a view’s location and size using the parent view’s coordinate system (important for placing the view in the parent)
- bounds = a view’s location and size using its own coordinate system (important for placing the view’s content or subviews within itself)
Details
To help me remember frame, I think of a picture frame on a wall. The picture frame is like the border of a view. I can hang the picture anywhere I want on the wall. In the same way, I can put a view anywhere I want inside a parent view (also called a superview). The parent view is like the wall. The origin of the coordinate system in iOS is the top left. We can put our view at the origin of the superview by setting the view frame’s x-y coordinates to (0, 0), which is like hanging our picture in the very top left corner of the wall. To move it right, increase x, to move it down increase y.
To help me remember bounds, I think of a basketball court where sometimes the basketball gets knocked out of bounds. You are dribbling the ball all over the basketball court, but you don’t really care where the court itself is. It could be in a gym, or outside at a high school, or in front of your house. It doesn’t matter. You just want to play basketball. In the same way, the coordinate system for a view’s bounds only cares about the view itself. It doesn’t know anything about where the view is…