简体   繁体   English

标签和Imageviews在iOS7中的自定义单元格中表现异常

[英]Labels and Imageviews oddly behaves in custom cell in iOS7

I have a custom cell that has labels and imageviews. 我有一个具有标签和图像视图的自定义单元格。 The labels and imageviews are displayed based on the condition. 根据条件显示标签和图像视图。 My custom cell oddly behaves when uitableview is scrolled. 滚动uitableview时,我的自定义单元格异常起作用。 There is an instance where when i scroll the one label and imageview the label and imageviews are displayed but when i scroll back to the imageviews and label one label and imageview will disappear, sometimes it overlaps another imageview and label. 在某些情况下,当我滚动一个标签和imageview时,将显示该标签和imageview,但是当我滚动回imageviews和标签时,一个标签和imageview将消失,有时它会与另一个imageview和label重叠。 Here's what I tried so far: 这是我到目前为止尝试过的:

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

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

I still get the same result. 我仍然得到相同的结果。 I read another solution and moved my calculations in my customcell.m file. 我阅读了另一个解决方案,并将计算结果移到了customcell.m文件中。 This is in the layoutSubviews method. 这是在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;
    }
}

This is my code for cellForRowAtIndexPath: 这是我的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;
    }

My code works perfectly in iOS 8. Im really confused why it doesn't work in iOS 7. I have been struggling with this since last week. 我的代码在iOS 8中运行完美。我非常困惑为什么在iOS 7中无法运行。自上周以来,我一直在为此苦苦挣扎。 Can somebody please help me. 有人能帮帮我吗。

you may try below code - 您可以尝试以下代码-

Write Below code after 之后写下面的代码

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

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

AND

cell.clipsToBounds = YES;

Add all UIlabel and UIImage as below 如下所示添加所有UIlabel和UIImage

[cell.contentView addSubview:myLabel] ;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM