2010-07-19 6 views
5

Я хочу отобразить UIButton в нижнем колонтитуле UITableView (он должен быть точно таким же для заголовка).UITableView tableFooterView weird resizing

Этот код находится в viewDidLoad моего 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); 

Однако этот код не работает. Ширина кнопки слишком велика, она равна 320. (Высота правильная, хотя.) Первые NSLog выдает 70, второй и третий выход 320. Таким образом, метод setTableFooterView странно изменяет размер кнопки.

Я решил эту проблему, поставив UIButton в другой UIView перед установкой его в качестве таблицы сноски:

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]; 

Это работает, кнопка имеет правильную ширину.

Однако я не понимаю, почему первый образец кода не работает. Может ли кто-нибудь объяснить?

ответ

19

Независимо от того, какую ширину вы устанавливаете для представления, которое вы добавляете в качестве нижнего колонтитула/заголовка UITableView, его ширина всегда будет такой же, как ширина таблицы.

Итак, в вашем случае добавленный вами вид изменяется до CGRectMake(0, 0, 320, 50), но кнопка остается с правильным фреймом. рамка Баттона в соответствии с видом ...

EDIT:
Единственный параметр в кадре FOOTER в/заголовка, которая остается, как вы установите его высота.

Извещение что если вы измените высоту представления заголовка/нижнего колонтитула после его добавления в таблицу, он не будет вносить никаких изменений. Вы должны установить высоту перед добавлением ее в таблицу ...

+2

Да, это все, что делает размер вида, который я создал, а я просто не заметил. Спасибо. Я думаю, что в документах следует упомянуть, что настройка свойства tableFooterView изменяет размер представления, что могло бы сэкономить мне некоторое время. – avf

3

На самом деле есть способ, с которым я столкнулся, пытаясь преодолеть эту проблему;

Создайте пустой UIView 320x (высота вашей кнопки), а затем поместите кнопку, расположенную внутри этого содержащего вида. Таким образом, кнопка внутри представления не изменяется.

Надеется, что это помогает,

Джонатан