【问题标题】:Resizing UITableView调整 UITableView 的大小
【发布时间】:2012-07-24 20:04:49
【问题描述】:

我正在做这个项目。目前我面临一个问题,我在一个 ViewController 中有 3 个 UITableView。它看起来像这样:

现在,第一个 TableView(顶部)只有一行,大小为 55 像素,并且不必调整大小。接下来,第二个是 TableView,同样有一行,但是这一行必须根据它的内容来调整大小。现在这个 TableView 显示了这一行:

此行必须调整大小取决于其中文本的长度。我计算大小的方法是:

if(tableView == self.usersPostOnTheWallTableView) {
    NSDictionary *propertyItems = [self.repliesItems objectAtIndex:indexPath.row];

    NSString *text = [self.postItems objectForKey:@"text"];

    NSLog(@"%@", text);

    CGSize constraintSize = CGSizeMake(280, MAXFLOAT);

    CGSize sizeText = [text sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:constraintSize lineBreakMode:UILineBreakModeWordWrap];

    self.height = MAX(sizeText.height, 44.0f);

    self.photosArray = [propertyItems objectForKey:@"attach_photos"];
    self.videosArray = [propertyItems objectForKey:@"attach_videos"];

    if((self.photosArray.count == 0) && (self.videosArray.count == 0)) {

        height += (CELL_CONTENT_MARGIN * 2);

    } else if ((self.videosArray.count > 0) && (self.photosArray.count == 0)) {

        height += 90 + (CELL_CONTENT_MARGIN * 2);

    } else if((self.photosArray.count > 0) && (self.videosArray.count == 0)) {

        height += 85 + (CELL_CONTENT_MARGIN * 2);
    }

}

现在,如果文本非常小,它会很好地适应行,并且调整行的大小。比如这样:

但是,文本变大后,会发生这种情况:

显然我不需要滚动,我会禁用它。但这里的问题是它需要文本的大小,并调整标签的大小,你可以看到它从标签的顶部和底部产生了多少空间。但它并没有把实际的文字放在那里。另一件事是它没有自行调整 TableView 的大小,当我试图调整它的大小时,我得到了中间表与底部表的重叠。

谁能推荐任何解决方案,或者另一种实现方式?

提前致谢!

【问题讨论】:

  • 第一个和第二个视图为什么使用 UITableView?第一个只是一个看起来像表格行的按钮,第二个只是一个文本视图,那你为什么要把你的生活复杂化呢? :-)
  • 在第二个中我需要显示一行,因为还有图像和视频。
  • 视频和图像仍然无法成为表格。很抱歉跑题了,但当设计似乎离题太多时,我无法专注于技术细节。
  • 我已经有自定义单元格,可以在那里显示图像和视频,我已经在使用它了。虽然我删除了第一个 tableview,只制作了一个按钮,但我需要在第二个中显示单元格。
  • 这个设计选择也让你对这个可调整大小的视图更加困难,因为你需要将 UITableView 和 UITableViewCell 的高度都设置为文本的高度。

标签: objective-c ios uitableview autoresize


【解决方案1】:

你可以这样做是使用 tableviewDelegate 方法根据你的文本设置单元格高度,例如:

每个单元格都会调用这个方法来决定单元格应该有多少高度

  - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
 {
    NSString *strDetails = [yourTextArray objectAtIndex:indexPath.row];
   //if(indexPath.row == 1)
   //{
     CGSize stringSize = [strDetails sizeWithFont:[UIFont fontWithName:@"Marker Felt" size:13] constrainedToSize:CGSizeMake(320, 9999) lineBreakMode:UILineBreakModeWordWrap]; // Provide text as well as font name in which your text will be displayed and constrainedToSize which defines width and height it should be maximum
     return stringSize.height+65; //Here 65 can be any value depending on Calculation  ImageView height + uppermost space + bottom space added
   //}
   //else 
   //{
   //  return 80 // anything u wishes
   //}
 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    • 2012-09-13
    • 2012-06-09
    • 2011-03-17
    相关资源
    最近更新 更多