ios7,8上, TableViewCell里面的内容不显示的 一种情况

        今天遇到了一个情况,就是 一个table的 cell在 ios6上面显示的 很好,但是在ios8上面就有一部分显示不出来。

 开始以为是 因为 cell加了个scrollerView,导致定位不准导致的问题。


    代码如下:

    

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

  实现是这样的:

  

        UILabel *startTime = [[UILabel alloc] initWithFrame:CGRectMake(10, 12, 145, 38)];
        startTime.backgroundColor = [UIColor colorWithRed:240.0 / 255.0 green:240.0 / 255.0 blue:240.0 / 255.0 alpha:1.0];
        startTime.textAlignment = NSTextAlignmentCenter;
        startTime.textColor = [UIColor lightGrayColor];
        startTime.text = NSLocalizedString(@"text_pedometer_sleep_starttime", "");
        
        UILabel *endTime = [[UILabel alloc] initWithFrame:CGRectMake(164, 12, 148, 38)];
        endTime.backgroundColor = [UIColor colorWithRed:240.0 / 255.0 green:240.0 / 255.0 blue:240.0 / 255.0 alpha:1.0];
        endTime.textAlignment = NSTextAlignmentCenter;
        endTime.textColor = [UIColor lightGrayColor];
        endTime.text = NSLocalizedString(@"text_pedometer_sleep_endtime", "");
        
        if ([[StringUtils getPreferredLanguage] isEqualToString:@"zh-CN"] || [[StringUtils getPreferredLanguage] isEqualToString:@"zh-TW"]) {
            startTime.font = [UIFont fontWithName:chinese_font size:16];
            endTime.font = [UIFont fontWithName:chinese_font size:16];
        } else {
            startTime.font = [UIFont fontWithName:english_font size:16];
            endTime.font = [UIFont fontWithName:english_font size:16];
        }
        
        
        increaseOne = [UIButton buttonWithType:UIButtonTypeCustom];
        increaseOne.tag = Digit_Button_One_Increase;
        increaseOne.titleLabel.font = [UIFont fontWithName:chinese_font size:17];
        [increaseOne setTitle:@"+" forState:UIControlStateNormal];
        [increaseOne setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal];
        [increaseOne addTarget:self action:@selector(digitCountPressed:) forControlEvents:UIControlEventTouchUpInside];
        increaseOne.layer.borderColor = [[UIColor orangeColor] CGColor];
        increaseOne.layer.borderWidth = button_border;
        
        decreaseOne = [UIButton buttonWithType:UIButtonTypeCustom];
        decreaseOne.tag = Digit_Button_One_Decrease;
        decreaseOne.titleLabel.font = [UIFont fontWithName:chinese_font size:17];
        [decreaseOne setTitle:@"-" forState:UIControlStateNormal];
        [decreaseOne setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal];
        [decreaseOne addTarget:self action:@selector(digitCountPressed:) forControlEvents:UIControlEventTouchUpInside];
        decreaseOne.layer.borderColor = [[UIColor orangeColor] CGColor];
        decreaseOne.layer.borderWidth = button_border;
        
        increaseTwo = [UIButton buttonWithType:UIButtonTypeCustom];
        increaseTwo.tag = Digit_Button_Two_Increase;
        increaseTwo.titleLabel.font = [UIFont fontWithName:chinese_font size:17];
        [increaseTwo setTitle:@"+" forState:UIControlStateNormal];
        [increaseTwo setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal];
        [increaseTwo addTarget:self action:@selector(digitCountPressed:) forControlEvents:UIControlEventTouchUpInside];
        increaseTwo.layer.borderColor = [[UIColor orangeColor] CGColor];
        increaseTwo.layer.borderWidth = button_border;
        
        decreaseTwo = [UIButton buttonWithType:UIButtonTypeCustom];
        decreaseTwo.tag = Digit_Button_Two_Decrease;
        decreaseTwo.titleLabel.font = [UIFont fontWithName:chinese_font size:17];
        [decreaseTwo setTitle:@"-" forState:UIControlStateNormal];
        [decreaseTwo setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal];
        [decreaseTwo addTarget:self action:@selector(digitCountPressed:) forControlEvents:UIControlEventTouchUpInside];
        decreaseTwo.layer.borderColor = [[UIColor orangeColor] CGColor];
        decreaseTwo.layer.borderWidth = button_border;
        
        increaseThree = [UIButton buttonWithType:UIButtonTypeCustom];
        increaseThree.tag = Digit_Button_Three_Increase;
        increaseThree.titleLabel.font = [UIFont fontWithName:chinese_font size:17];
        [increaseThree setTitle:@"+" forState:UIControlStateNormal];
        [increaseThree setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal];
        [increaseThree addTarget:self action:@selector(digitCountPressed:) forControlEvents:UIControlEventTouchUpInside];
        increaseThree.layer.borderColor = [[UIColor orangeColor] CGColor];
        increaseThree.layer.borderWidth = button_border;
        
        decreaseThree = [UIButton buttonWithType:UIButtonTypeCustom];
        decreaseThree.tag = Digit_Button_Three_Decrease;
        decreaseThree.titleLabel.font = [UIFont fontWithName:chinese_font size:17];
        [decreaseThree setTitle:@"-" forState:UIControlStateNormal];
        [decreaseThree setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal];
        [decreaseThree addTarget:self action:@selector(digitCountPressed:) forControlEvents:UIControlEventTouchUpInside];
        decreaseThree.layer.borderColor = [[UIColor orangeColor] CGColor];
        decreaseThree.layer.borderWidth = button_border;
        
        increaseFour = [UIButton buttonWithType:UIButtonTypeCustom];
        increaseFour.tag = Digit_Button_Four_Increase;
        increaseFour.titleLabel.font = [UIFont fontWithName:chinese_font size:17];
        [increaseFour setTitle:@"+" forState:UIControlStateNormal];
        [increaseFour setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal];
        [increaseFour addTarget:self action:@selector(digitCountPressed:) forControlEvents:UIControlEventTouchUpInside];
        increaseFour.layer.borderColor = [[UIColor orangeColor] CGColor];
        increaseFour.layer.borderWidth = button_border;
        
        decreaseFour = [UIButton buttonWithType:UIButtonTypeCustom];
        decreaseFour.tag = Digit_Button_Four_Decrease;
        decreaseFour.titleLabel.font = [UIFont fontWithName:chinese_font size:17];
        [decreaseFour setTitle:@"-" forState:UIControlStateNormal];
        [decreaseFour setTitleColor:[UIColor orangeColor] forState:UIControlStateNormal];
        [decreaseFour addTarget:self action:@selector(digitCountPressed:) forControlEvents:UIControlEventTouchUpInside];
        decreaseFour.layer.borderColor = [[UIColor orangeColor] CGColor];
        decreaseFour.layer.borderWidth = button_border;

        
        increaseOne.frame = CGRectMake(10 , 60, 70, 30);
        decreaseOne.frame = CGRectMake(10, 170, 70, 30);
        
        increaseTwo.frame = CGRectMake(85, 60, 70, 30);
        decreaseTwo.frame = CGRectMake(85, 170, 70, 30);
        
        increaseThree.frame = CGRectMake(164, 60, 70, 30);
        decreaseThree.frame = CGRectMake(164, 170, 70, 30);
        
        increaseFour.frame = CGRectMake(241, 60, 70, 30);
        decreaseFour.frame = CGRectMake(241, 170, 70, 30);
      

        

        UIView *view1 = [[UIView alloc] initWithFrame:CGRectMake(-92, 30, 50, 0)];
        [view1 addSubview:digitOne];
        
        UIView *view2 = [[UIView alloc] initWithFrame:CGRectMake(-16, 30, 50, 0)];
        [view2 addSubview:digitTwo];
        
        UIView *view3 = [[UIView alloc] initWithFrame:CGRectMake(63, 30, 50, 0)];
        [view3 addSubview:digitThree];
        
        UIView *view4 = [[UIView alloc] initWithFrame:CGRectMake(140, 30, 50, 0)];
        [view4 addSubview:digitFour];
        

        
        [cell.contentView addSubview:startTime];
        [cell.contentView addSubview:endTime];
        
        [cell.contentView addSubview:increaseOne];
        [cell.contentView addSubview:decreaseOne];
        [cell.contentView addSubview:increaseTwo];
        [cell.contentView addSubview:decreaseTwo];
        [cell.contentView addSubview:increaseThree];
        [cell.contentView addSubview:decreaseThree];
        [cell.contentView addSubview:increaseFour];
        [cell.contentView addSubview:decreaseFour];
        
        [cell.contentView addSubview:view1];
        [cell.contentView addSubview:view2];
        [cell.contentView addSubview:view3];
        [cell.contentView addSubview:view4];
        
        [cell setSelectionStyle:UITableViewCellSelectionStyleNone];
        
        cell.frame = CGRectMake(0, 0, screen_width, 250);
        cell.contentView.superview.frame = cell.frame;


  效果就是 在ios8 上面只能显示一部分控件,

increaseOne , 这几个控件不显示。


后面发现原因在于, increaseOne 这几个控件不是每次cell创建的时候都创建,而是用的成员变量保存起来,只创建了一次。


 如何看看 

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

这个函数的实现:

   

return [[self tableView:tableView cellForRowAtIndexPath:indexPath] frame].size.height;

这个函数为了省的自己再次计算高度,再次手动调用了1次  

cellForRowAtIndexPath:indexPath 
函数,导致cell 被重新创建了一次,而increaseOne这个是成员,估计在oldCell中被释放掉了,但是这个newcell不会用来显示,仅仅被用来计算高度了,导致了oldcell 中的显示问题。


  

  找到了问题就好解决了,有2个方法:

1.  

heightForRowAtIndexPath  函数中老实的每次返回自己计算的高度


2.  

cellForRowAtIndexPath 

函数中每次都重新创建子控件,而不是 用成员变量来保存。




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值