2016-01-06 1 views
2

Я принял UITableView в UIScrollView теперь я хочу, чтобы установить статическую высоту tabelview и установить contentSize в ScrollView потому UITableView вызова cellForRowAtIndexPath каждый раз, когда я прокручиваю tableview.Установить высоту UITableView, которые содержат динамический Cell Height

Я устанавливаю tableviewcell динамически, используя приведенный ниже код.

Теперь вопрос: как и где я могу установить общую высоту до tableview и размер контента для моего scrollview?

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSMutableDictionary *itemDataDic = [resultArray objectAtIndex:indexPath.row]; 
    UIFont *cellFont = [UIFont fontWithName:@"Helvetica" size:15.0]; 
    CGSize constraintSize = CGSizeMake(275.0f, MAXFLOAT); 
    CGSize labelSize = [[itemDataDic objectForKey:@"offer_title"] sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:NSLineBreakByWordWrapping]; 

    if (labelSize.height > 30.00f) 
    { 
     totalHeight = totalHeight + 325; 
     return 325; 
    } 
    else 
    { 
     totalHeight = totalHeight + 306; 
     return 306; 
    } 
} 
+0

См cellforrowatIndexpath будет вызывать для каждого и каждый свиток Tableview –

+0

я знаю, но я хочу, чтобы назначить общую высоту всей клетки Tableview и установить размер контента Scrollview –

+0

просто использовать numberofrows * cellheight по высоте Tableview –

ответ

1

«heightForRowAtIndexPath» называется много раз за поэтому, totalHeight вычисляется неправильно таким образом.

Вам нужно рассчитать высоту таблицы в init и когда данные были изменены.

-(void) reloadAndResizeTable 
{ 
    CGFloat totalHeight = .0f; 
    for (NSMutableDictionary* itemDataDic in resultArray) { 
     UIFont *cellFont = [UIFont fontWithName:@"Helvetica" size:15.0]; 
     CGSize constraintSize = CGSizeMake(275.0f, MAXFLOAT); 
     CGSize labelSize = [[itemDataDic objectForKey:@"offer_title"] sizeWithFont:cellFont constrainedToSize:constraintSize lineBreakMode:NSLineBreakByWordWrapping]; 

     if (labelSize.height > 30.00f) 
     { 
      totalHeight = totalHeight + 325.0f; 
      return 325; 
     } 
     else 
     { 
      totalHeight = totalHeight + 306.0f; 
      return 306; 
     } 
    } 
    CGRect frame = [yourTableView frame]; 
    [yourTableView setFrame:CGRectMake(frame.origin.x, frame.origin.y, frame.size.width, totalHeight)]; 
    [yourTableView reloadData]; 
} 
+0

Я знаю этот метод, но через это я должен использовать для цикла. Я хочу любое лучшее решение, если оно есть. –

0

Ну, может быть худшим решением будет перебирать каждый строк и рассчитать общую высоту всех строк, а затем установить те, как:

CGFloat totalHeight = 0.0f; 
    for (int i = 0; i < resultArray.count; i++){ 
     totalHeight += [self tableView:tableView heightForRowAtIndexPath:[NSIndexPath indexPathForRow:i section:0]]; 
    // add separator height as well if you have. 
    } 

// totalHeight is your tableview height. 
Смежные вопросы