向上滚动后,UITableview项目变为粗体

时间:2014-01-31 04:49:03

标签: ios uitableview label uilabel tableview

好吧也许我太挑剔了。如果你看不到它,请提前道歉,但在第二张照片中,行上的项目有点像素化,或者好像一个单词放在一个单词的顶部。这只发生在我向上滚动桌面视图后,否则,它与第一张图像类似。

第一张照片:

http://oi61.tinypic.com/308grjc.jpg

第二张图片(您可以在此处看到字体的不同之处):http://oi61.tinypic.com/2mqpbb9.jpg

一旦我向上滚动,它就会更加大胆和粗略。

我坦率地不明白为什么。 tableview正在正常加载。任何帮助,预感或建议都会有很大关联,即使它可以指向正确的区域。

以下是第二张图片的tableview的代码。

static NSString *CellIdentifier = @"OrderProductCell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1    reuseIdentifier:CellIdentifier] autorelease];

}

//cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];


//configure cell, display name and cost of each item
OrderProduct *p = [[order.items allObjects] objectAtIndex:indexPath.row];

UILabel *lableName=[[UILabel alloc]initWithFrame:CGRectMake(10, 16, 300, 20)];
lableName.backgroundColor=[UIColor clearColor];
lableName.font=[UIFont boldSystemFontOfSize:19];
[lableName setFont:[UIFont fontWithName:@"Arial-Bold" size:12.0]];
lableName.text=p.name;

//UILabel *counterNumber=[[UILabel alloc]initWithFrame:CGRectMake(10, 25, 300, 20)];
//counterNumber.backgroundColor=[UIColor clearColor];
//counterNumber.font=[UIFont systemFontOfSize:12];
//counterNumber.text=[NSString stringWithFormat:@"Scan time :%@",p.scannerCounter];
[cell.detailTextLabel setText:[NSString stringWithFormat:@"%@ %.02f",p.currency, p.cost]];
cell.imageView.image = [UIImage imageNamed:p.image];
[cell addSubview:lableName];
//[cell release];
//[cell addSubview:counterNumber];
return cell;

3 个答案:

答案 0 :(得分:2)

这种情况正在发生,因为您没有重复使用单元格,因此您基本上是一次又一次地添加标签,而不是使用现有标签。

只需将以下代码放在if(cell == nil):

static NSString *CellIdentifier = @"OrderProductCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
UILabel *lableName;
if(cell==nil){  
    // this is where we should initialize and customize the UI elements,
    // or in this case your label.
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier];
    lableName=[[UILabel alloc]initWithFrame:CGRectMake(10, 16, 300, 20)];
    lableName.backgroundColor=[UIColor clearColor];
    lableName.font=[UIFont boldSystemFontOfSize:19];
    [lableName setFont:[UIFont fontWithName:@"Arial-Bold" size:12.0]];
    [cell addSubview:lableName];
}
// this is where we should assign the value.
OrderProduct *p = [[order.items allObjects] objectAtIndex:indexPath.row];    
lableName.text = p.name;
/*
assign other values if any
...
*/
return cell;

这样,lableName不会一次又一次地添加到单元格中,因此不会出现此问题。

重用单元属性的最佳方法是初始化和自定义if(cell == nil)中的所有内容,并仅在if条件之外添加元素的值。

答案 1 :(得分:1)

  1. 不要直接向细胞添加子视图,将其添加到cell的contentView
  2. 在重复使用单元格时,您需要首先删除现有标签并添加新标签或使用现有单元格而不是添加新标签。
  3. 更改您的代码,如:

    static NSString *CellIdentifier = @"OrderProductCell";
    
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    UILabel *lableName    = nil;
    if (cell == nil)
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1    reuseIdentifier:CellIdentifier] autorelease];
        lableName=[[UILabel alloc]initWithFrame:CGRectMake(10, 16, 300, 20)];
        lableName.backgroundColor=[UIColor clearColor];
        lableName.font=[UIFont boldSystemFontOfSize:19];
        [lableName setFont:[UIFont fontWithName:@"Arial-Bold" size:12.0]];
        lableName.tag = 7;
        [cell.contentView addSubview:lableName];
    }
    
    
    //configure cell, display name and cost of each item
    OrderProduct *p = [[order.items allObjects] objectAtIndex:indexPath.row];
    lableName = (UILabel *)[cell.contentView viewWithTag:7];
    lableName.text=p.name;
    
    [cell.detailTextLabel setText:[NSString stringWithFormat:@"%@ %.02f",p.currency, p.cost]];
    cell.imageView.image = [UIImage imageNamed:p.image];
    
    return cell;
    

答案 2 :(得分:1)

第1行和第2行都使用相同的设置字体

    lableName.font=[UIFont boldSystemFontOfSize:19]; // line 1

    [lableName setFont:[UIFont fontWithName:@"Arial-Bold" size:12.0]]; // line 2

    [cell.contentView addSubview:lableName];

    UILabel *lableName    = nil;

//Inside your cellForRowAtIndexPath put this code
static NSString *CellIdentifier = @"OrderProductCell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1    reuseIdentifier:CellIdentifier] autorelease];

}

//cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];


//configure cell, display name and cost of each item
OrderProduct *p = [[order.items allObjects] objectAtIndex:indexPath.row];
    if (cell == nil)
    {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1    reuseIdentifier:CellIdentifier] autorelease];
    lableName=[[UILabel alloc]initWithFrame:CGRectMake(10, 16, 300, 20)];
    lableName.backgroundColor=[UIColor clearColor];
    [lableName setFont:[UIFont fontWithName:@"Arial-Bold" size:12.0]]; // set fonts only once
    [cell.contentView addSubview:lableName];
    }