0

我创建了一个具有分组样式的表格视图。我已将此表添加到 UIScrollView 的子视图中。我根据表格的行数计算了表格的大小。所以tableView没有滚动。我将能够看到所有的细胞。

表格第一次正常工作并显示所有单元格。但是我的问题是每当我导航到下一页并返回并重新加载该表时,它只会渲染和重绘已分配的单元格。被重用的单元格不会被重绘。tableView:cellForRowAtIndexPath: 也没有被这些单元格调用。

我怀疑由于 tableview 的滚动被禁用,因此重用单元格的 cellForRowAtIndexPath 方法没有被调用,因此它们没有被渲染。

我通过以下方式创建了 tableView

 m_TravellerDetailTable = [[UITableView alloc] initWithFrame: CGRectMake( 2.0f, 0, 315.0f, 370 ) style: UITableViewStyleGrouped ];
 float height = (tableViewCellHeight * [travellersArray count]);
 m_TravellerDetailTable.frame = CGRectMake(2, 0, 315, height);
 [m_TravellerDetailTable setBounces: NO];
 [m_TravellerDetailTable setScrollEnabled: NO];
 [m_BaseScrollView addSubview: m_TravellerDetailTable];

UITableViewDelegate 方法

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
   {
       return [travellersArray count];
   }

 -(CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
   {
       return tableViewCellHeight;
   }

   - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
  {  

     static NSString *CellIdentifier = @"Cell";
     cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
     if (cell == nil) 
     {

            cell = [[TravellerDetailCustomCellView alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
     }


     TravellerDetailCustomCellView *customCell = (TravellerDetailCustomCellView *)cell;
     [customCell.textLabel setText:[travellerInfoFromDetailForm objectForKey:@"DOB"]];
  }

此快照显示渲染所有单元格的 uitableview

带有所有单元格的 UITableView

快照仅显示 uitableview 渲染到“成人 8”单元格。之后,表格不会呈现剩余的单元格。

没有重用单元格的 UITableView

4

2 回答 2

1

它正在渲染,但是您的框架太小并且表格视图被切断。

你应该删除

[m_TravellerDetailTable setBounces: NO];
[m_TravellerDetailTable setScrollEnabled: NO];
于 2012-09-14T10:34:38.070 回答
0

它是由 UIScrollView 引起的。 UIScrollView 缓存了它的子视图的绘图。我建议你不要将 UITableView 添加到 UIScrollView

于 2012-09-14T10:50:03.967 回答