ios - Labels 和 Imageviews 在 iOS7 的自定义单元格中表现异常

标签 ios objective-c uitableview

我有一个带有标签和 ImageView 的自定义单元格。标签和 ImageView 根据条件显示。滚动 uitableview 时,我的自定义单元格表现异常。有一种情况,当我滚动一个标签和 ImageView 时,会显示标签和 ImageView ,但是当我滚动回 ImageView 并标记一个标签和 ImageView 时,它会消失,有时它会与另一个 ImageView 和标签重叠。到目前为止,这是我尝试过的:

static NSString *simpleTableIdentifier = @"JobDetailCell";
MTJobDetailCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier forIndexPath:indexPath];

if (cell == nil) {
    cell = [[MTJobDetailCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:simpleTableIdentifier];
}

我仍然得到相同的结果。我阅读了另一个解决方案并将我的计算移动到我的 customcell.m 文件中。这是在 layoutSubviews 方法中。

NSInteger tempCount = [[NSUserDefaults standardUserDefaults] integerForKey:@"BenefitsCounter"];
NSDictionary *tempDictionary = [NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] objectForKey:@"IncentivesAndBenefits"]];
//TEST
NSLog(@"TEMP INT:%ld", (long)tempCount);
NSLog(@"TEMP ARRAY:%@", tempDictionary);

BOOL iFood = tempDictionary[@"food"][@"1"];
NSString* iFoodDescription = tempDictionary[@"food"][@"1"];
BOOL iCommission = tempDictionary[@"commission"][@"1"];
NSString* iCommissionDescription = tempDictionary[@"commission"][@"1"];
BOOL iUniform = tempDictionary[@"uniform"][@"1"];
NSString* iUniformDescription = tempDictionary[@"uniform"][@"1"];
BOOL iTransport = tempDictionary[@"transport"][@"1"];
NSString* iTransportDescription = tempDictionary[@"transport"][@"1"];
BOOL iExtras = tempDictionary[@"extras"][@"1"];
NSString* iExtrasDescription = tempDictionary[@"extras"][@"1"];

//MARK: POSITION labels and imageviews
int img_x = kImgStart_x;
int img_w = kImgStart_w;
int img_h = kImgStart_h;

//result value positions
int lbl_x = kLblStart_x;
int lbl_y = kLblStart_y;
int lbl_w = kLblStart_w;

if(tempCount == 1)
{
    if(iCommission)
    {
        //decrement
        tempCount--;
        CGSize expectedSize =[self GetTextHightForLable:iCommissionDescription];

        self.imgCommissionIncentive.frame = CGRectMake(img_x, lbl_y, img_w, img_h);
        self.imgCommissionIncentive.image = [UIImage imageNamed:@"icon-commission.png"];
        self.lblCommissionIncentive.frame = CGRectMake(lbl_x, lbl_y, lbl_w, expectedSize.height+10);
    }

    if(iExtras)
    {
        //decrement
        tempCount--;
        CGSize expectedSize =[self GetTextHightForLable:iExtrasDescription];

        self.imgExtrasIncentive.frame = CGRectMake(img_x, lbl_y, img_w, img_h);
        self.imgExtrasIncentive.image = [UIImage imageNamed:@"icon-extras.png"];
        self.lblExtrasIncentive.frame = CGRectMake(lbl_x, lbl_y, lbl_w, expectedSize.height+10);
    }

    if(iFood)
    {
        //decrement
        tempCount--;
        CGSize expectedSize =[self GetTextHightForLable:iFoodDescription];

        self.imgFoodIncentive.frame = CGRectMake(img_x, lbl_y, img_w, img_h);
        self.imgFoodIncentive.image = [UIImage imageNamed:@"icon-food.png"];
        self.lblFoodIncentive.frame = CGRectMake(lbl_x, lbl_y, lbl_w, expectedSize.height+10);
    }

    if(iTransport)
    {
        //decrement
        tempCount--;
        CGSize expectedSize =[self GetTextHightForLable:iTransportDescription];

        self.imgTransportIncentive.frame = CGRectMake(img_x, lbl_y, img_w, img_h);
        self.imgTransportIncentive.image = [UIImage imageNamed:@"icon-transport.png"];
        self.lblTransportIncentive.frame = CGRectMake(lbl_x, lbl_y, lbl_w, expectedSize.height+10);
    }

    if(iUniform)
    {
        //decrement
        tempCount--;
        CGSize expectedSize =[self GetTextHightForLable:iUniformDescription];

        self.imgUniformIncentive.frame = CGRectMake(img_x, lbl_y, img_w, img_h);
        self.imgUniformIncentive.image = [UIImage imageNamed:@"icon-uniform2.png"];
        self.lblUniformIncentive.frame = CGRectMake(lbl_x, lbl_y, lbl_w, expectedSize.height+10);
    }
}
else if (tempCount > 1)
{
    if(iCommission)
    {
        //decrement
        tempCount--;
        CGSize expectedSize =[self GetTextHightForLable:iCommissionDescription];

        self.imgCommissionIncentive.frame = CGRectMake(img_x, lbl_y, img_w, img_h);
        self.imgCommissionIncentive.image = [UIImage imageNamed:@"icon-commission.png"];
        self.imgCommissionIncentive.contentMode = UIViewContentModeScaleAspectFit;
        self.lblCommissionIncentive.frame = CGRectMake(lbl_x, lbl_y, lbl_w, expectedSize.height+10);

        lbl_y += kResult_Y_incr;
    }

    if(iExtras)
    {
        //decrement
        tempCount--;
        CGSize expectedSize =[self GetTextHightForLable:iExtrasDescription];

        self.imgExtrasIncentive.frame = CGRectMake(img_x, lbl_y, img_w, img_h);
        self.imgExtrasIncentive.image = [UIImage imageNamed:@"icon-extras.png"];
        self.imgExtrasIncentive.contentMode = UIViewContentModeScaleAspectFit;
        self.lblExtrasIncentive.frame = CGRectMake(lbl_x, lbl_y, lbl_w, expectedSize.height+10);

        lbl_y += kResult_Y_incr;
    }

    if(iFood)
    {
        //decrement
        tempCount--;
        CGSize expectedSize =[self GetTextHightForLable:iFoodDescription];

        self.imgFoodIncentive.frame = CGRectMake(img_x, lbl_y, img_w, img_h);
        self.imgFoodIncentive.image = [UIImage imageNamed:@"icon-food.png"];
        self.imgFoodIncentive.contentMode = UIViewContentModeScaleAspectFit;
        self.lblFoodIncentive.frame = CGRectMake(lbl_x, lbl_y, lbl_w, expectedSize.height+10);

        lbl_y += kResult_Y_incr;
    }

    if(iTransport)
    {
        //decrement
        tempCount--;
        CGSize expectedSize =[self GetTextHightForLable:iTransportDescription];

        self.imgTransportIncentive.frame = CGRectMake(img_x, lbl_y, img_w, img_h);
        self.imgTransportIncentive.image = [UIImage imageNamed:@"icon-transport.png"];
        self.imgTransportIncentive.contentMode = UIViewContentModeScaleAspectFit;
        self.lblTransportIncentive.frame = CGRectMake(lbl_x, lbl_y, lbl_w, expectedSize.height+10);

        lbl_y += kResult_Y_incr;
    }

    if(iUniform)
    {
        //decrement
        tempCount--;
        CGSize expectedSize =[self GetTextHightForLable:iUniformDescription];

        self.imgUniformIncentive.frame = CGRectMake(img_x, lbl_y, img_w, img_h);
        self.imgUniformIncentive.image = [UIImage imageNamed:@"icon-uniform2.png"];
        self.imgUniformIncentive.contentMode = UIViewContentModeScaleAspectFit;
        self.lblUniformIncentive.frame = CGRectMake(lbl_x, lbl_y, lbl_w, expectedSize.height+10);

        lbl_y += kResult_Y_incr;
    }
}

这是我的 cellForRowAtIndexPath 代码:

    NSString *strIncentives = [[self.jobDetailDict objectForKey:@"sub_slots"] objectForKey:@"incentives_and_benefits"];
    if(![strIncentives length] == 0)
    {
        NSData *jsonData = [strIncentives dataUsingEncoding:NSUTF8StringEncoding];
        NSError *error;
        iBenefitsCounter = 0;

        incentives = [NSJSONSerialization
                      JSONObjectWithData:jsonData
                      options:NSJSONReadingMutableContainers|NSJSONReadingMutableLeaves
                      error:&error];

        //TEST
        //NSLog(@"INCETIVES DICT: %@", incentives);

        //BOOL iCommission = incentives[@"commission"][@"1"];
        NSString *iCommissionDescription = incentives[@"commission"][@"1"];
        if([iCommissionDescription isEqualToString:@""] || incentives[@"commission"][@"0"])
        {
            [cell.imgCommissionIncentive setHidden:true];
            [cell.lblCommissionIncentive setHidden:true];
        }
        else
        {
            [cell.imgCommissionIncentive setHidden:false];
            cell.imgCommissionIncentive.image = [UIImage imageNamed:@"icon-commission.png"];

            [cell.lblCommissionIncentive setHidden:false];
            [cell.lblCommissionIncentive setText:iCommissionDescription];
            cell.lblCommissionIncentive.font = [UIFont fontWithName:@"GillSans-Light" size:13.0f];
            iBenefitsCounter++;
        }

        //BOOL iExtras = incentives[@"extras"][@"1"];
        NSString *iExtrasDescription = incentives[@"extras"][@"1"];
        if([iExtrasDescription isEqualToString:@""] || incentives[@"extras"][@"0"])
        {
            [cell.imgExtrasIncentive setHidden:true];
            [cell.lblExtrasIncentive setHidden:true];
        }
        else
        {
            [cell.imgExtrasIncentive setHidden:false];
            cell.imgExtrasIncentive.image = [UIImage imageNamed:@"icon-extras.png"];

            [cell.lblExtrasIncentive setHidden:false];
            [cell.lblExtrasIncentive setText:iExtrasDescription];
            cell.lblExtrasIncentive.font = [UIFont fontWithName:@"GillSans-Light" size:13.0f];
            iBenefitsCounter++;
        }

        //BOOL iFood = incentives[@"food"][@"1"];
        NSString *iFoodDescription = incentives[@"food"][@"1"];
        if([iFoodDescription isEqualToString:@""] || incentives[@"food"][@"0"])
        {
            [cell.imgFoodIncentive setHidden:true];
            [cell.lblFoodIncentive setHidden:true];
        }
        else
        {
            [cell.imgFoodIncentive setHidden:false];
            cell.imgFoodIncentive.image = [UIImage imageNamed:@"icon-food.png"];

            [cell.lblFoodIncentive setHidden:false];
            [cell.lblFoodIncentive setText:iFoodDescription];
            cell.lblFoodIncentive.font = [UIFont fontWithName:@"GillSans-Light" size:13.0f];
            iBenefitsCounter++;
        }

        //BOOL iTransport = incentives[@"transport"][@"1"];
        NSString *iTransportDescription = incentives[@"transport"][@"1"];
        if([iTransportDescription isEqualToString:@""] || incentives[@"transport"][@"0"])
        {
            [cell.imgUniformIncentive setHidden:true];
            [cell.lblUniformIncentive setHidden:true];
        }
        else
        {
            [cell.imgTransportIncentive setHidden:false];
            cell.imgTransportIncentive.image = [UIImage imageNamed:@"icon-transport.png"];

            [cell.lblUniformIncentive setHidden:false];
            [cell.lblTransportIncentive setText:iTransportDescription];
            cell.lblUniformIncentive.font = [UIFont fontWithName:@"GillSans-Light" size:13.0f];
            iBenefitsCounter++;
        }

        //BOOL iUniform = incentives[@"uniform"][@"1"];
        NSString *iUniformDescription = incentives[@"uniform"][@"1"];
        if([iUniformDescription isEqualToString:@""] || incentives[@"uniform"][@"0"])
        {
            [cell.imgUniformIncentive setHidden:true];
            [cell.lblUniformIncentive setHidden:true];

        }
        else
        {
            [cell.imgUniformIncentive setHidden:false];
            cell.imgUniformIncentive.image = [UIImage imageNamed:@"icon-uniform2.png"];

            [cell.lblUniformIncentive setHidden:false];
            [cell.lblUniformIncentive setText:iUniformDescription];
            cell.lblUniformIncentive.font = [UIFont fontWithName:@"GillSans-Light" size:13.0f];
            iBenefitsCounter++;
        }

        [[NSUserDefaults standardUserDefaults] setInteger:iBenefitsCounter forKey:@"BenefitsCounter"];
        [[NSUserDefaults standardUserDefaults]setObject:[NSKeyedArchiver archivedDataWithRootObject:incentives] forKey:@"IncentivesAndBenefits"];
        [[NSUserDefaults standardUserDefaults] synchronize];

        return cell;
    }

我的代码在 iOS 8 中完美运行。我真的很困惑为什么它在 iOS 7 中不起作用。自上周以来我一直在努力解决这个问题。 有人可以帮帮我吗。

最佳答案

您可以尝试下面的代码 -

之后写入以下代码
if (cell == nil) {
    cell = [[MTJobDetailCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:simpleTableIdentifier];
}

for(UIView *view in cell.contentView.subviews){  
        if ([view isKindOfClass:[UIView class]]) {  
            [view removeFromSuperview];   
        }
    }

cell.clipsToBounds = YES;

添加所有 UIlabel 和 UIImage 如下

[cell.contentView addSubview:myLabel] ;

关于ios - Labels 和 Imageviews 在 iOS7 的自定义单元格中表现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30461983/

相关文章:

ios - 这里映射 iOS SDK : Rotate the marker in Here maps

ios - UITableViewCell 中的行仅显示来自 USGS 的第一个索引数组

iphone - View Controller 继承。找不到接口(interface)

ios - 单击 UITableView 中的标签时,tableview 单元格中的 IndexPath 返回错误

ios - 如何在创建的 UIViewController 中执行另一个 UIViewController 的函数

ios - UITableView 删除按钮没有出现

javascript - 如何在 UIWebView 中将数据从 Xcode 传递到 javascript?

ios - 更新 TableView 单元格数据

iphone - 重写内部 UIViewController 方法,因为内部方法给我带来了错误

ios - 在应用程序运行时更改 util 类中的#define