dynamic地改变目标C中单元的高度

我创build了一个表视图的应用程序。 在每个单元格中使用视图和标签。 但是,如果我在(!单元格)代码中创build视图和单元格,它会返回空单元格,如果删除(!单元格)条件,则会显示数据但不会占用dynamic高度。 谁能帮帮我吗。

- (void)viewDidLoad{ NSString *Path = [[NSBundle mainBundle] bundlePath]; NSString *DataPath = [Path stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.plist", LanguageFile]]; NSMutableDictionary *tempDict = [[NSMutableDictionary alloc] initWithContentsOfFile:DataPath]; self.reloadArray = [tempDict objectForKey:@"Rows"];} -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return [self.reloadArray count]; } -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return 1; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { // Get data for the current row NSString *textData = [reloadArray objectAtIndex:indexPath.section] CGFloat dataTextHeight = [self getLabelHeightForIndex:textData]; if(dataTextHeight < 44) { dataTextHeight = 44; } return dataTextHeight; } -(CGFloat)getLabelHeightForIndex:(NSString *)string { CGSize maximumSize = CGSizeMake(280, 10000); CGSize labelHeightSize = [string sizeWithFont:[UIFont fontWithName:@"Helvetica" size:14.0f] constrainedToSize:maximumSize lineBreakMode:NSLineBreakByWordWrapping]; if(labelHeightSize.height < 44){ labelHeightSize.height = 44; } return labelHeightSize.height; } -(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ static NSString *CellIdentifier = @"Cell"; static const int textViewTag = 1, textLabelTag = 2; UIImageView *img = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"standard_back.png"]]; img.frame = tableView.frame; tableView.backgroundView = img; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (!cell) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; // First view UIView *textView = [[UIView alloc] initWithFrame: CGRectMake(0.0, 0.0, 280.0, 36.00)]; textView.tag = textViewTag; textView.autoresizingMask = UIViewAutoresizingFlexibleWidth; [cell.contentView addSubview:textView]; // First label UILabel *textLabel = [[UILabel alloc] initWithFrame:CGRectMake(10.0, 0.0, 270.0, 36.00)]; textLabel.tag = textLabelTag; textLabel.font = [UIFont fontWithName:@"Helvetica-Bold" size:14.0f]; textLabel.textColor = [UIColor whiteColor]; textLabel.backgroundColor = [UIColor clearColor]; textLabel.numberOfLines = 0; textLabel.lineBreakMode = NSLineBreakByWordWrapping; textLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth; // textLabel.clipsToBounds = YES; [cell.contentView addSubview:textLabel]; } NSString *textData = [reloadArray objectAtIndex:(indexPath.section)]; CGFloat dataTextHeight = [self getLabelHeightForIndex:textData]; UIView *textView = [cell.contentView viewWithTag:textViewTag]; CGRect textViewFrame = textView.frame; textView.frame = CGRectMake(0.0, 0.0, textViewFrame.size.width, dataTextHeight); UILabel *textLabel = [cell.contentView viewWithTag:textLabelTag]; CGRect textLabelFrame = textLabel.frame; textLabel.frame = CGRectMake(10.0, 0.0, textLabelFrame.size.width, dataTextHeight); textLabel.text = textData; textLabel.backgroundColor= [UIColor clearColor]; textLabel.textAlignment = NSTextAlignmentCenter; cell.backgroundColor = [UIColor colorWithWhite:0 alpha:.65]; cell.textLabel.numberOfLines = 0; // Multiline cell.textLabel.lineBreakMode = NSLineBreakByWordWrapping; cell.textLabel.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; return cell; } 

提前致谢。

这是我在我的应用程序中使用的代码的一部分。 这对我很好,如果你需要帮助,请给我。

 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath; { CGSize constraintSize = {230.0, 20000}; //230 is cell width & 20000 is max height for cell CGSize neededSize = [ [NSString stringWithFormat:@"%@",[cellar objectAtIndex:indexPath.row]] sizeWithFont:[UIFont fontWithName:@"HelveticaNeue-Medium" size:15.0f] constrainedToSize:constraintSize lineBreakMode:UILineBreakModeCharacterWrap]; return MAX(45, neededSize.height +33); } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; { cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; } CGSize constraintSize = {230.0, 20000}; UILabel* label = [[UILabel alloc] init]; [label setNumberOfLines:0]; label.backgroundColor = [UIColor clearColor]; [label setFont:[UIFont fontWithName:@"HelveticaNeue-Medium" size:15.0f]]; label.adjustsFontSizeToFitWidth = NO; CGSize neededSize = [ [NSString stringWithFormat:@"%@",[cellar objectAtIndex:indexPath.row] ] sizeWithFont:[UIFont fontWithName:@"HelveticaNeue-Medium" size:15.0f] constrainedToSize:constraintSize lineBreakMode:UILineBreakModeCharacterWrap]; // NSLog(@"Height%f",neededSize.height); //NSLog(@"width%f",neededSize.width); [label setText:[NSString stringWithFormat:@"%@",[cellar objectAtIndex:indexPath.row] ]]; [label setFrame:CGRectMake(10, 2, 230, MAX(neededSize.height+30, 44.0f))]; [[cell contentView] addSubview:label]; cell.selectionStyle=UITableViewCellSelectionStyleNone; return cell; } 

希望能帮助到你。!!!

我看到很多解决scheme,但都是错误的或不完整的。 你可以用viewDidLoad和autolayout中的5行来解决所有的问题。 这对于客观的C:

 _tableView.delegate = self; _tableView.dataSource = self; self.tableView.estimatedRowHeight = 80;//the estimatedRowHeight but if is more this autoincremented with autolayout self.tableView.rowHeight = UITableViewAutomaticDimension; [self.tableView setNeedsLayout]; [self.tableView layoutIfNeeded]; self.tableView.contentInset = UIEdgeInsetsMake(20, 0, 0, 0) ; 

对于迅捷2.0:

  self.tableView.estimatedRowHeight = 80 self.tableView.rowHeight = UITableViewAutomaticDimension self.tableView.setNeedsLayout() self.tableView.layoutIfNeeded() self.tableView.contentInset = UIEdgeInsetsMake(20, 0, 0, 0) 

现在使用xib或在Storyboard中的tableview中创build你的单元格使用这个,你不需要实现任何更多或覆盖。 (不要忘记号码行0)和底部标签(约束)降级“内容拥抱优先 – 垂直到250”

在这里输入图像说明

您可以在下一个url中下载代码: https : //github.com/jposes22/exampleTableCellCustomHeight

参考文献: http : //candycode.io/automatically-resizing-uitableviewcells-with-dynamic-text-height-using-auto-layout/

 - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return "your content height"; }