2015-07-18 5 views
0

Im, использующий AutoLayout в моих ячейках, но когда ячейка имеет большой текст внутри ячейки, а ячейка расширяется, ячейка, похоже, перекрывает ячейку ниже. Изображение показывает, как это перекрывая клетки:IOS - UITableViewCell, перекрывающий UITableViewCell

enter image description here

UITableViewCell:

 #import "PostTableViewCell.h" 

     @implementation PostTableViewCell 

     @synthesize main; 
     @synthesize top; 
     @synthesize center; 
     @synthesize centerLeft; 
     @synthesize centerRight; 
     @synthesize bottom; 
     @synthesize labelMessage; 
     @synthesize labelCat; 
     @synthesize labelSubCat; 
     @synthesize labelCountry; 
     @synthesize labelUser; 
     @synthesize labelDate; 
     @synthesize imageviewThreadImage; 
     @synthesize split; 


     - (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier { 
      self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]; 
      if (self) { 
      [self.contentView setTranslatesAutoresizingMaskIntoConstraints:NO]; 
      self.contentView.autoresizingMask = UIViewAutoresizingFlexibleHeight|UIViewAutoresizingFlexibleWidth; 

      CGRect screenBound = [[UIScreen mainScreen] bounds]; 
      CGSize screenSize = screenBound.size; 
      CGFloat screenWidth = screenSize.width; 
      //CGFloat screenHeight = screenSize.height; 

      main = [UIView new]; 
      [self.contentView addSubview:main]; 
      main.translatesAutoresizingMaskIntoConstraints = NO; 
      [main sizeToFit]; 
      main.backgroundColor = [UIColor whiteColor]; 

      top = [UIView new]; 
      [main addSubview:top]; 
      top.translatesAutoresizingMaskIntoConstraints = NO; 
      [top sizeToFit]; 
      top.backgroundColor = [UIColor whiteColor]; 

      labelUser = [UILabel new]; 
      [top addSubview:labelUser]; 
      labelUser.translatesAutoresizingMaskIntoConstraints = NO; 
      [labelUser sizeToFit]; 
      [labelUser setFont:[UIFont systemFontOfSize:10]]; 
      labelUser.textColor = [UIColor colorWithRed:(114.0/255.0) green:(114.0/255.0) blue:(114.0/255.0) alpha:1.0]; 

      labelDate = [UILabel new]; 
      [top addSubview:labelDate]; 
      labelDate.translatesAutoresizingMaskIntoConstraints = NO; 
      [labelDate sizeToFit]; 
      [labelDate setFont:[UIFont systemFontOfSize:10]]; 
      labelDate.textColor = [UIColor colorWithRed:(114.0/255.0) green:(114.0/255.0) blue:(114.0/255.0) alpha:1.0]; 

      center = [UIView new]; 
      [main addSubview:center]; 
      center.translatesAutoresizingMaskIntoConstraints = NO; 
      [center sizeToFit]; 
      center.backgroundColor = [UIColor whiteColor]; 


      imageviewThreadImage = [UIImageView new]; 
      [center addSubview:imageviewThreadImage]; 
      imageviewThreadImage.translatesAutoresizingMaskIntoConstraints = NO; 
      imageviewThreadImage.backgroundColor = [UIColor colorWithRed:(207.0/255.0) green:(215.0/255.0) blue:(248.0/255.0) alpha:1.0]; 
      [imageviewThreadImage sizeToFit]; 

      labelMessage = [UILabel new]; 
      [center addSubview:labelMessage]; 
      labelMessage.translatesAutoresizingMaskIntoConstraints = NO; 
      [labelMessage sizeToFit]; 
      [labelMessage setFont:[UIFont systemFontOfSize:12]]; 
      labelMessage.preferredMaxLayoutWidth = screenWidth - 10 - 36; 
      labelMessage.lineBreakMode = NSLineBreakByWordWrapping; 
      labelMessage.numberOfLines = 0; 
      labelMessage.textColor = [UIColor lightGrayColor]; 
      //labelMessage.backgroundColor = [UIColor colorWithRed:(207.0/255.0) green:(215.0/255.0) blue:(248.0/255.0) alpha:1.0]; 
      //labelMessage.lineBreakMode = UILineBreakModeWordWrap; 

      bottom = [UIView new]; 
      [main addSubview:bottom]; 
      bottom.translatesAutoresizingMaskIntoConstraints = NO; 
      [bottom sizeToFit]; 

      labelCat = [UILabel new]; 
      [bottom addSubview:labelCat]; 
      labelCat.translatesAutoresizingMaskIntoConstraints = NO; 
      [labelCat sizeToFit]; 
      [labelCat setFont:[UIFont systemFontOfSize:10]]; 
      labelCat.textColor = [UIColor colorWithRed:(58.0/255.0) green:(82.0/255.0) blue:(207.0/255.0) alpha:1.0]; 
      labelCat.lineBreakMode = NSLineBreakByWordWrapping; 
      labelCat.numberOfLines = 0; 

      labelSubCat = [UILabel new]; 
      [bottom addSubview:labelSubCat]; 
      labelSubCat.translatesAutoresizingMaskIntoConstraints = NO; 
      [labelSubCat sizeToFit]; 
      [labelSubCat setFont:[UIFont systemFontOfSize:10]]; 
      labelSubCat.textColor = [UIColor colorWithRed:(58.0/255.0) green:(82.0/255.0) blue:(207.0/255.0) alpha:1.0]; 

      labelCountry = [UILabel new]; 
      [bottom addSubview:labelCountry]; 
      labelCountry.translatesAutoresizingMaskIntoConstraints = NO; 
      [labelCountry sizeToFit]; 
      [labelCountry setFont:[UIFont systemFontOfSize:10]]; 
      labelCountry.textColor = [UIColor colorWithRed:(58.0/255.0) green:(82.0/255.0) blue:(207.0/255.0) alpha:1.0]; 

      split = [UIView new]; 
      [main addSubview:split]; 
      split.translatesAutoresizingMaskIntoConstraints = NO; 
      [split sizeToFit]; 
      split.backgroundColor = [UIColor grayColor]; 


      } 

      return self; 
     } 

     - (void)layoutSubviews 
     { 
      [super layoutSubviews]; 
      // Make sure the contentView does a layout pass here so that its subviews have their frames set, which we 
      // need to use to set the preferredMaxLayoutWidth below. 
      [self.contentView setNeedsLayout]; 
      [self.contentView layoutIfNeeded]; 

      // Set the preferredMaxLayoutWidth of the mutli-line bodyLabel based on the evaluated width of the label's frame, 
      // as this will allow the text to wrap correctly, and as a result allow the label to take on the correct height. 
      self.labelMessage.preferredMaxLayoutWidth = CGRectGetWidth(self.labelMessage.frame); 
     } 

     - (void)updateConstraints { 
      [super updateConstraints]; 

      if (self.didSetupConstraints) return; 

      NSDictionary *viewsDictionary7 = @{@"main":main}; 
      NSArray *constraint_H37 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[main]|" 
               options:0 
               metrics:nil 
              views:viewsDictionary7]; 

      NSArray *constraint_V37 = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[main]|" 
               options:0 
               metrics:nil 
              views:viewsDictionary7]; 
      [self.contentView addConstraints:constraint_H37]; 
      [self.contentView addConstraints:constraint_V37]; 

      //NSString *text = labelMessage.text; 

      NSDictionary *viewsDictionary3 = @{@"top":top,@"center":center,@"bottom":bottom,@"split":split}; 
      NSArray *constraint_H3 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-10-[top]-5-[center(>=40)]-5-[bottom]-10-[split(1)]|" 
              options:0 
              metrics:nil 
               views:viewsDictionary3]; 

      NSArray *constraint_H33cvcv4545fdd = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[split]|" 
               options:0 
               metrics:nil 
                views:viewsDictionary3]; 

      NSArray *constraint_H33 = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[top]|" 
               options:0 
               metrics:nil 
              views:viewsDictionary3]; 

      NSArray *constraint_H333 = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[center]|" 
               options:0 
               metrics:nil 
              views:viewsDictionary3]; 

      NSArray *constraint_H3335657 = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|[bottom]|" 
               options:0 
               metrics:nil 
               views:viewsDictionary3]; 

      NSDictionary *viewsDictionary4 = @{@"labelUser":labelUser,@"labelDate":labelDate}; 
      NSArray *constraint_H4 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[labelUser]|" 
              options:0 
              metrics:nil 
               views:viewsDictionary4]; 

      NSDictionary *viewsDictionary45 = @{@"labelDate":labelDate}; 
      NSArray *constraint_H4555 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|[labelDate]|" 
              options:0 
              metrics:nil 
               views:viewsDictionary45]; 

      NSArray *constraint_H44 = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-5-[labelUser]-20-[labelDate]-5-|" 
               options:0 
               metrics:nil 
              views:viewsDictionary4]; 

      NSDictionary *viewsDictionary48 = @{@"labelMessage":labelMessage,@"imageviewThreadImage":imageviewThreadImage}; 



      NSArray *constraint_H48 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-5-[labelMessage]-5-|" 
               options:0 
               metrics:nil 
              views:viewsDictionary48]; 

      NSArray *constraint_H48342 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-8-[imageviewThreadImage(36)]" 
              options:0 
              metrics:nil 
               views:viewsDictionary48]; 



      NSArray *constraint_H448345fgdfg = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-5-[imageviewThreadImage(36)]" 
               options:0 
               metrics:nil 
               views:viewsDictionary48]; 

      CGRect screenBound = [[UIScreen mainScreen] bounds]; 
      CGSize screenSize = screenBound.size; 
      CGFloat screenWidth = screenSize.width; 
      //CGFloat screenHeight = screenSize.height; 


      NSArray *constraint_H448345fgdfgdfdf454 = [NSLayoutConstraint constraintsWithVisualFormat:[NSString stringWithFormat:@"H:|-46-[labelMessage(%f)]-10-|",screenWidth - 51] 
                options:0 
                metrics:nil 
               views:viewsDictionary48]; 




      /**NSArray *constraint_H448 = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-5-[labelMessage]-5-|" 
               options:0 
               metrics:nil 
      views:viewsDictionary48];**/ 

      NSDictionary *viewsDictionary488 = @{@"labelCat":labelCat,@"labelCountry":labelCountry,@"labelSubCat":labelSubCat}; 
      NSArray *constraint_H488 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-5-[labelCat]|" 
               options:0 
               metrics:nil 
              views:viewsDictionary488]; 
      NSArray *constraint_H48898 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-5-[labelCountry]|" 
              options:0 
              metrics:nil 
               views:viewsDictionary488]; 
      NSArray *constraint_H48898fgf54 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-5-[labelSubCat]|" 
                options:0 
                metrics:nil 
               views:viewsDictionary488]; 

      NSArray *constraint_H4488 = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-5-[labelCat]-10-[labelSubCat]-10-[labelCountry]" 
              options:0 
              metrics:nil 
               views:viewsDictionary488]; 



      [self.contentView addConstraints:constraint_H3]; 
      [self.contentView addConstraints:constraint_H33]; 
      [self.contentView addConstraints:constraint_H333]; 
      [self.contentView addConstraints:constraint_H4]; 
      [self.contentView addConstraints:constraint_H44]; 
      [self.contentView addConstraints:constraint_H48]; 
      //[self.contentView addConstraints:constraint_H448]; 
      [self.contentView addConstraints:constraint_H4555]; 
      [self.contentView addConstraints:constraint_H3335657]; 
      [self.contentView addConstraints:constraint_H488]; 
      [self.contentView addConstraints:constraint_H48342]; 
      [self.contentView addConstraints:constraint_H4488]; 
      [self.contentView addConstraints:constraint_H448345fgdfg]; 
      [self.contentView addConstraints:constraint_H48898]; 
      [self.contentView addConstraints:constraint_H48898fgf54]; 
      [self.contentView addConstraints:constraint_H33cvcv4545fdd]; 
      [self.contentView addConstraints:constraint_H448345fgdfgdfdf454]; 



      self.didSetupConstraints = YES; 

     } 



     - (void)awakeFromNib { 
      // Initialization code 
     } 

     - (void)setSelected:(BOOL)selected animated:(BOOL)animated { 
      [super setSelected:selected animated:animated]; 

      // Configure the view for the selected state 
     } 

     @end 

Как мои клетки повторно:

CellForRowIndexPath -

if(tableView == tableViewPost){ 


    Post *t = (Post*)[tmpArray2 objectAtIndex:indexPath.row]; 

      static NSString *simpleTableIdentifier = @"SimpleTableItem46"; 

      PostTableViewCell *cell = (PostTableViewCell*)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; 
      //cell.layer.shouldRasterize = YES; 
      //cell.layer.rasterizationScale = [UIScreen mainScreen].scale; 
      if (cell == nil) { 
      cell = [[PostTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier]; 
      } 


      cell.labelMessage.text = t.message; 
      cell.labelCat.text = t.cat; 
      cell.labelSubCat.text = t.subcat; 
      cell.labelCountry.text = t.country; 
      cell.labelUser.text = [NSString stringWithFormat:@"%@", t.user]; 
      cell.labelDate.text = [NSString stringWithFormat:@"%@", t.date]; 


      [cell.contentView setNeedsUpdateConstraints]; 
      [cell.contentView updateConstraintsIfNeeded]; 
      [cell.contentView setNeedsLayout]; 
      [cell.contentView layoutIfNeeded]; 
      return cell; 

     } 

HeightForRowIndexPath -

if(tableView == tableViewPost){ 



     Post *t = (Post*)[tmpArray2 objectAtIndex:indexPath.row]; 

      PostTableViewCell *cell = (PostTableViewCell*)[self tableView:tableView cellForRowAtIndexPath:indexPath]; 

      [cell.contentView setNeedsUpdateConstraints]; 
      [cell.contentView updateConstraintsIfNeeded]; 
      [cell.contentView setNeedsLayout]; 
      [cell.contentView layoutIfNeeded]; 


      CGFloat height = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height; 
      //CGSize size = [cell.contentView systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]; 



      return height; 
     } 

ответ

1

если вы используете IOS 8 или больше, вы можете попробовать

tableView.rowHeight = UITableViewAutomaticDimension 
tableView.estimatedRowHeight = 70.0 
+0

Это, похоже, работал, когда клетки первой нагрузки, но теперь, когда я прокрутки перекрывание происходит снова – redoc01

+0

вы можете улучшить estimatedRowHeight с метод делегата, оцененныйHeightForRowAtIndexPath, похожий на heightForRowAtIndexPath – Lennet

+0

, который не работает – redoc01

Смежные вопросы