带自定义单元格和分隔符的UITableView。滚动时Alpha值会发生变化

时间:2014-04-24 04:24:40

标签: ios objective-c uitableview alpha

我有UITableView Custom Cell。一些自定义单元格正在加载图像。 我为具有图像的单元格添加了自定义分隔符。滚动时出现问题。每当我滚动时,UIView opacity都会发生变化。

这是我的代码:

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

static NSString *CellIdentifier = @"Cell";
CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell == nil){
    NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
    cell = [topLevelObjects objectAtIndex:0];
}  

if (cell && (NSNull*) imageString != [NSNull null])
{
    UIView* separatorLineView; = [[UIView alloc] initWithFrame:CGRectMake(0, -1, 320, 5)];
    separatorLineView.backgroundColor = [UIColor blackColor];
    separatorLineView.alpha = 0.2;
    [cell.contentView addSubview:separatorLineView];
}  

Alpha给出的视图是0.2,滚动时它变得越来越厚。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

我认为问题在于您在滚动时已经将一个separatorLineView添加到已经有一个的单元格中,因此您所看到的是其他行之上的行。您可以通过在线条视图中添加标记来修复此问题,并检查单元格是否包含带有该标记的子视图,如果是,则不要添加其他行。

答案 1 :(得分:0)

在您的代码中可能是单元格可重用性的问题。请尝试使用以下代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    . 
    .
    .
    .
    if(cell == nil)
    {
       NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil];
       cell = [topLevelObjects objectAtIndex:0];

      if(cellHasImage == YES)
      {
         //// just initialize UIView and add as addSubview of cell.contentView
         UIView* separatorLineView; = [[UIView alloc] init];
         separatorLineView.frame = CGRectMake(0, -1, 320, 5);
         separatorLineView.tag = 111; // set whatever you like
         [cell.contentView addSubview:separatorLineView];
      }
    }
    .
    .
    .
    /// get UIView base on it's tag
    if(cellHasImage == YES)
    { 
       UIView* separatorLineView; = (UIView *) [cell.contentView viewWithTag:111];
       separatorLineView.backgroundColor = [UIColor blackColor];
       separatorLineView.alpha = 0.2;
     }

    .
    .
    .

    return cell;
}

答案 2 :(得分:0)

执行@rmaddy和@rdelmar所建议的内容,但是既然您仍在使用自定义单元格,那么最快的方式就是:

  1. 直接通过 Interface Builder 将此行添加到单元格contentView
    • @property (strong, nonatomic) IBOutlet UIView *vwLine;
      • @synthesize vwLine;
    • 设置它的框架,背景颜色& alpha值(显然
    • 将其hidden媒体资源设为YES
  2. 进行imageString != [NSNull null]检查时
    • 如果为TRUE则[cell.vwLine setHidden:NO];
  3. 实施例

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        static NSString *CellIdentifier = @"Cell";
        CustomCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    
        if(cell == nil) {
            NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"CustomCell"
                                                                     owner:self
                                                                   options:nil];
            cell = [topLevelObjects objectAtIndex:0];
        }  
    
        if (imageString != [NSNull null]) {
            [cell.vwLine setHidden:NO];
        }
    }