Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

UITableView tableFooterView weird resizing

I want to display a UIButton in a UITableView's Footer (should be exactly the same for the header).

This code is in the viewDidLoad of my TableViewController:

UIButton *footerShareButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[footerShareButton setFrame:CGRectMake(10, 0, 70, 50)];
NSLog(@"%f", footerShareButton.frame.size.width);

[self.tableView setTableFooterView:footerShareButton];

NSLog(@"%f", footerShareButton.frame.size.width);
NSLog(@"%f", self.tableView.tableFooterView.frame.size.width);

However, this code doesn't work. The Button's width is much too large, it's 320. (The height is correct though.) The first NSLog outputs 70, the second and the third output 320. So it seems like the setTableFooterView method strangely resizes the button.

I have solved this problem by putting the UIButton in another UIView before setting it as the table footer:

 UIButton *footerShareButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
 [footerShareButton setFrame:CGRectMake(10, 0, 70, 50)];

 UIView *aView = [[UIView alloc] initWithFrame:CGRectMake(10, 0, 70, 50)];
 [aView addSubview:footerShareButton];

 [self.tableView setTableFooterView:aView];
 [aView release];

This works, the button has the correct width.

However, I don't understand why the first code sample doesn't work. Can anyone explain?

like image 464
avf Avatar asked Jul 19 '10 12:07

avf


2 Answers

No matter what width you set to the view that you are adding as a UITableView footer/header - its width always will be the same as the table's width.

So, in your case the view that you've added is resized to CGRectMake(0, 0, 320, 50), but the button remains with the correct frame. Button's frame is according to the view...

EDIT:
The only parameter in footer's/header's frame that remains as you set it is the height.

Notice that if you will change the height of the header/footer view after it is added to the table it won't make any change. You should set the height before adding it to the table...

like image 92
Michael Kessler Avatar answered Nov 07 '22 00:11

Michael Kessler


There is actually a way which I came across trying to overcome this problem;

Create an empty UIView 320x(the height of your button) and then place the button centred inside this containing view. This way the button inside the view doesn't get resized.

Hope this helps,

Jonathan

like image 25
Jonathan King Avatar answered Nov 07 '22 01:11

Jonathan King