2013-04-11 3 views
0

У меня есть представление с двумя UILabels, двумя UITableViews и UITextView. Я пытаюсь развернуть две таблицы на основе того, что они будут отображать. Я могу создать начальные размеры таблицы просто отлично, но когда я иду, чтобы сбросить высоту таблицы на основе ее фактического содержимого, таблица больше не отображается в представлении. Фрагмент кода ниже:Сброс таблицы таблицы таблицы таблицы UiTableView исчезает

-(void)viewDidLoad 
{ 
// code to set up the first two UILabels (one of which is clinic name) 
... 

// 
// Create the address table 
// 
CGRect addrRect = self.view.bounds ; 
CGFloat addrStart = clinicNameRect.origin.y + (clinicNameRect.size.height)*1.5 ; 
addrRect.origin.y = addrStart; 
addrRect.size.height -= addrStart ; // setting it to size of rest of view which is not what I want 

addressList = [[UITableView alloc] initWithFrame:addrRect style:UITableViewStyleGrouped] ; 
[addressList setDataSource:self] ; 
[addressList setDelegate:self] ; 

[addressList setAutoresizingMask:UIViewAutoresizingFlexibleHeight | 
           UIViewAutoresizingFlexibleWidth] ; 
[addressList setBackgroundColor:clr] ; 
[addressList setBackgroundView:nil] ; // no background 

[[self view] addSubview:addressList] ; // tried moving this to after with same result 

// have the system layout the table, then reset the height to actual size 
[addressList layoutIfNeeded]; 

CGRect newFrame = [addressList frame] ; 
newFrame.size.height = [addressList contentSize].height ; 

// make the table's frame exactly match its size 
[addressList setFrame:newFrame] ; 

// go to set up next UITableView... 

Если я вынимаю вызов setFrame: мой стол появляется просто отлично (но занимает слишком много места на представлении). Если я оставлю этот вызов, таблица вообще не появится.

+0

Вы используете раскадровки/автозапуск? – Sam

+0

'NSStringFromCGRect' действительно упростит этот код. – Sulthan

+0

Выставление представления программно, потому что я хочу, чтобы вторая таблица двигалась вниз по мере роста первой таблицы. Когда я использовал XIB, когда первая таблица росла, она была закрыта второй таблицей. Может быть, я делал что-то неправильно - все еще нова в этом. –

ответ

0

Просьба ознакомиться с документацией о разнице между [UIView bounds] и [UIView frame].

Хотя изменение источника в bounds может быть в некоторых конкретных ситуациях возможно, вы действительно хотите изменить frame.

Кроме того, как frame, так и bounds являются анимированными. Установка нового значения запускает анимацию, и если вы затем получаете доступ к значению, вам не нужно получать текущее значение.

+0

Спасибо, новичок ошибка. Все еще выдумывая все это. Я перешел на использование фрейма, но моя корневая проблема все еще существует. Когда я изменяю размер UITableView, он исчезает из представления. Я думал, что проблема была origin.y, но она по-прежнему не перерисовывает таблицу. Если я удалю код, который изменяет размер таблицы, таблица появится прямо там, где я хочу, но она слишком большая. Когда я перехожу к его изменению, он полностью исчезает. Есть идеи? –

+0

@ DanNichols Ваш код почти невозможно понять, например. почему вы устанавливаете высоту таблицы на высоту своего содержимого? Также кажется странным, что установка кадра таблицы дважды (сначала в 'initWithFrame:', а затем с помощью 'setBounds:' (или 'setFrame:'). вы сначала упростите код, возможно, вы найдете проблему тогда. – Sulthan

+0

Позвольте мне посмотреть, могу ли я лучше объяснить, что я пытаюсь сделать (так что теперь игнорируйте мой код). У меня есть представление с двумя таблицами в нем. хотите, чтобы каждая таблица отображала весь свой набор ячеек все время.Но перед тем, как я ее создаю, я не знаю, насколько это будет. Итак, я создаю UITableView, который занимает оставшуюся часть экрана. Затем, вызывая layoutIfNeeded: я могу определить фактический размер таблицы.Я хочу, чтобы сбрасывать пространство, которое занимает таблица, точно в нужное пространство. Я хочу сделать то же самое для второй таблицы, чтобы она отображалась непосредственно под первой таблицей. Если есть более простой способ ... –

Смежные вопросы