2012-05-04 2 views
0

Я перетащил табличный вид в свою сцену сценарной сцены, но его высота статична и не будет корректироваться в зависимости от количества ячеек, которые она содержит, если я не вручную ее отрегулирую в раскадровки. Как я могу заставить эту таблицу отрегулировать свою собственную высоту в зависимости от общей высоты ее содержимого?Отрегулируйте высоту созданного раскадровки UITableview до высоты его содержимого

ответ

1

Вы собираетесь должны сделать некоторую версию этого:

  1. Выяснить, сколько ячеек будет отображаться
  2. Выяснить высоты для каждой ячейки
  3. Посчитайте и установить высота UITableView

Перед тем, как получить с ума (так как я знаю, что это довольно очевидно), позвольте мне следовать с этим:

  1. Если вы точно знаете, сколько ячеек будет отображаться все время (и это статическое значение), вы можете вручную отрегулировать высоту в Interface Builder.
  2. Если вы не знаете (что, я думаю, это так, исходя из вашего вопроса), вам нужно будет выполнить 1-е-3-е место выше во время выполнения. Тогда, поскольку UITableView является подклассом UIView, вы можете просто отрегулировать его свойство frame.

Например:

  1. У меня 7 клеток.
  2. Ячейки 1, 3 и 5 (индексы 0, 2 и 4) имеют высоту 20 пикселей.
  3. Ячейки 2, 4, 6 и 7 (индексы 1, 3, 5 и 6) имеют высоту 30 пикселей.
  4. мне нужна общая высота экрана 180 пикселей (возможно, на самом деле нужно играть с этим из-за разделителей и т.д ..)
  5. Таким образом, я могу просто позвонить:

CGFloat newHeight = ... // Whatever you calculate 
CGRect currentFrame = [[self MyTableView] frame]; 
[[self MyTableView] setFrame:CGRectMake(
       currentFrame.origin.x, 
       currentFrame.origin.y, 
       currentFrame.size.width, 
       newHeight) 
]; 

Если вы хотите получить действительно фантазию, вы можете анимировать изменение, обернув его в блок [UIView animationWithDuration:].

Надеюсь, это поможет!


Update/Edit

Вот запутано способ сделать это ... это работает, но я уверен, что есть лучший способ сделать это. I не утверждают, что это лучший/самый быстрый/самый эффективный способ. Это больше, чтобы показать принцип. ;-)

- (CGFloat)totalHeightNeededForTableView:(UITableView *)tv { 
    CGFloat retVal = 0; 

    int sectionCount = [self numberOfSectionsInTableView:tv]; 
    int rowCount = 0; 
    NSIndexPath *path = nil; 
    for (int i = 0; i < sectionCount; i = i + 1) { 
     rowCount = [self tableView:tv numberOfRowsInSection:i]; 
     for (int j = 0; j < rowCount; j = j + 1) { 
      path = [NSIndexPath indexPathForRow:j inSection:i]; 
      retVal = retVal + [self tableView:tv heightForRowAtIndexPath:path]; 
     } 
    } 
    return retVal; 
} 
+0

Как вы считаете, лучший способ скомпенсировать все высоты ячеек, чтобы получить новый рейтинг? – zakdances

+0

Ну, у вас есть * have *, чтобы предоставить 'UITableView' способ сделать это с помощью' numberOfSections ... ',' numberOfRowsInSection ... ',' heightForRow ... '.Таким образом, вы могли бы назвать это и самостоятельно разобраться. Или, если у вас есть базовая реализация (например, 1 массив, который ** является ** данными таблицы), вы можете просто перебрать массив и выяснить высоту строки для каждой ячейки, которая *** будет *** сделанные из этих данных. – mbm29414

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