uitableview自动调整中图像和单元格的动态高度

时间:2016-04-27 04:47:03

标签: ios uitableview dynamic height autoresize

如何set dynamic height imagecell UITableView Autoresizing UI。我在Storyboard中使用了var co_nameValue = $("#id_emp_coname").val() alert(co_nameValue ); 的自动调整大小。而且我从Web服务获得具有静态宽度和图像动态高度的图像,如Facebook。任何人都可以帮我设置图像和单元格的动态高度。

4 个答案:

答案 0 :(得分:1)

您可以使用此方法动态更改tableviewcell的高度

-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section{
 UIImage *img = [UIImage imageNamed:@"yourImage"];
 return img.size.height;
}

在下载后使用imageurl,使用下面的代码来更新身高

UIImage *img=[UIImage imageWithData:data];
  

[self.tableView beginUpdates];       [self.tableView endUpdates];

答案 1 :(得分:0)

您需要实施UITableViewDelegateUITableViewDataSource方法来执行此操作,并且还需要为每个单元格计算heightForRowAtIndexPathUITableViewDelegate方法)中单元格的高度

答案 2 :(得分:0)

您可以使用此方法

提供UITableViewCell的动态高度
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{

    return yourvalue;
}

答案 3 :(得分:0)

- (void)setDefaultRowHeights 
{
    self.imageHeights = [NSMutableArray arrayWithCapacity:self.imageURLs.count];
    for (int i = 0; i < self.imageURLs.count; i++) {
        self.imageHeights[i] = @(self.tableView.rowHeight);
    }
}
- (void)setDefaultRowHeights {
    self.imageHeights = [NSMutableArray arrayWithCapacity:self.imageURLs.count];
    for (int i = 0; i < self.imageURLs.count; i++) {
        self.imageHeights[i] = @(self.tableView.rowHeight);
    }
}

然后,让我们转到tableView:cellForRowAtIndexPath:我们在哪里下载图像并将它们的高度存储在我们的imageHeights数组中(这是一个很长的,但不要惊慌失措)。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    DynamicTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"DynamicCell" forIndexPath:indexPath];
    NSString *imageURL = self.imageURLs[indexPath.row];
    __weak DynamicTableViewCell *weakCell = cell;
    __weak typeof(self) weakSelf = self;
    [cell.mainImageView setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:imageURL]]
                              placeholderImage:[UIImage new]
                                       success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {
                                           weakCell.mainImageView.image = image;
                                           // Update table row heights
                                           NSInteger oldHeight = [weakSelf.imageHeights[indexPath.row] integerValue];
                                           NSInteger newHeight = (int)image.size.height;
                                           // If image is wider than our imageView, calculate the max height possible
                                           if (image.size.width > CGRectGetWidth(weakCell.mainImageView.bounds)) {
                                               CGFloat ratio = image.size.height / image.size.width;
                                               newHeight = CGRectGetWidth(self.view.bounds) * ratio;
                                           }

                                           // Update table row height if image is in different size
                                           if (oldHeight != newHeight) {
                                               weakSelf.imageHeights[indexPath.row] = @(newHeight);
                                               [weakSelf.tableView beginUpdates];
                                               [weakSelf.tableView endUpdates];
                                           }
                                       } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
                                           NSLog(@"Error: %@\nFetching image with url: %@", error, request.URL);
                                       }];

    return cell;
}

简单!我们现在可以在tableView:heightForRowAtIndexPath:方法中返回正确的值,如下所示:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    return [self.imageHeights[indexPath.row] integerValue];
}

正确重新加载表格视图

尝试尝试一些不同的方法。我发现只调用beginUpdates和endUpdates会在更改单元格高度时产生最佳动画/转换。你也可以放入reloadRowsAtIndexPaths:withRowAnimation:在这两者之间进行调用,但它会进行额外的刷新,并且UI看起来很糟糕。