Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cocoa: What's the difference between the frame and the bounds?

UIView and its subclasses all have the properties frame and bounds. What's the difference?

like image 620
mk12 Avatar asked Jul 31 '09 00:07

mk12


People also ask

What is the difference between frame and bounds?

TLDR: Bounds refers to the views own coordinate system while Frame refers to the views parent coordinate system.

What is frame in Uiview?

Frame A view's frame ( CGRect ) is the position of its rectangle in the superview 's coordinate system. By default it starts at the top left. Bounds A view's bounds ( CGRect ) expresses a view rectangle in its own coordinate system.


1 Answers

The bounds of an UIView is the rectangle, expressed as a location (x,y) and size (width,height) relative to its own coordinate system (0,0).

The frame of an UIView is the rectangle, expressed as a location (x,y) and size (width,height) relative to the superview it is contained within.

So, imagine a view that has a size of 100x100 (width x height) positioned at 25,25 (x,y) of its superview. The following code prints out this view's bounds and frame:

// This method is in the view controller of the superview - (void)viewDidLoad {     [super viewDidLoad];      NSLog(@"bounds.origin.x: %f", label.bounds.origin.x);     NSLog(@"bounds.origin.y: %f", label.bounds.origin.y);     NSLog(@"bounds.size.width: %f", label.bounds.size.width);     NSLog(@"bounds.size.height: %f", label.bounds.size.height);      NSLog(@"frame.origin.x: %f", label.frame.origin.x);     NSLog(@"frame.origin.y: %f", label.frame.origin.y);     NSLog(@"frame.size.width: %f", label.frame.size.width);     NSLog(@"frame.size.height: %f", label.frame.size.height); } 

And the output of this code is:

bounds.origin.x: 0 bounds.origin.y: 0 bounds.size.width: 100 bounds.size.height: 100  frame.origin.x: 25 frame.origin.y: 25 frame.size.width: 100 frame.size.height: 100 

So, we can see that in both cases, the width and the height of the view is the same regardless of whether we are looking at the bounds or frame. What is different is the x,y positioning of the view. In the case of the bounds, the x and y coordinates are at 0,0 as these coordinates are relative to the view itself. However, the frame x and y coordinates are relative to the position of the view within the parent view (which earlier we said was at 25,25).

There is also a great presentation that covers UIViews. See slides 1-20 which not only explain the difference between frames and bounds but also show visual examples.

like image 95
shek Avatar answered Oct 02 '22 22:10

shek