如何重新加载UITableViewCell Objective C?

时间:2017-02-27 13:02:29

标签: ios objective-c xcode uitableview

我的UITableViewCell中有图像,在更改了单元格w.r.t图像高度的约束后,我想重新加载单元格。

我试过这种方法,但是这个功能花了很少的时间来执行,因此,应用程序暂停了一段时间。

[cell reloadRowsAtIndexPaths:indexPath withRowAnimation:UITableViewRowAnimationNone];

你能告诉我另一个方法是简单地重新加载单元格而不是表格吗?

2 个答案:

答案 0 :(得分:3)

目标c

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;
  

例如,要重新加载第1部分的第2行和第2部分的第3行,   你必须这样做:

NSIndexPath* indexPath1 = [NSIndexPath indexPathForRow:2 inSection:1];
NSIndexPath* indexPath2 = [NSIndexPath indexPathForRow:3 inSection:2];
// Add them in an index path array
NSArray* indexArray = [NSArray arrayWithObjects:indexPath1, indexPath2, nil];
// Launch reload for the two index path
[self.tableView reloadRowsAtIndexPaths:indexArray withRowAnimation:UITableViewRowAnimationFade];
  

或者你也可以这样做

[self.tableView beginUpdates];
[self.tableView reloadRowsAtIndexPaths:@[indexPathOfYourCell] withRowAnimation:UITableViewRowAnimationNone];
[self.tableView endUpdates]; 

// *********** ****************************

<强> SWIFT

override func reloadRows(at indexPaths: [Any], with animation: UITableViewRowAnimation) {
}
  

例如,要重新加载第1部分的第2行和第2部分的第3行,   你必须这样做:

var indexPath1 = IndexPath(row: 2, section: 1)
var indexPath2 = IndexPath(row: 3, section: 2)
// Add them in an index path array
var indexArray: [Any] = [indexPath1, indexPath2]
/    / Launch reload for the two index path
self.tableView.reloadRows(at: indexArray, with: .fade)
  

或者你也可以这样做

self.tableView.beginUpdates()
self.tableView.reloadRows(at: [indexPathOfYourCell], with: [])
self.tableView.endUpdates()

答案 1 :(得分:0)

在完全加载图像之前尝试获取图像大小,之后将单元格高度更改为您假装的图像

#import <ImageIO/ImageIO.h>

NSMutableString *imageURL = [NSMutableString stringWithFormat:@"http://www.myimageurl.com/image.png"];

CGImageSourceRef source = CGImageSourceCreateWithURL((CFURLRef)[NSURLURLWithString:imageURL], NULL);
NSDictionary* imageHeader = (__bridge NSDictionary*) CGImageSourceCopyPropertiesAtIndex(source, 0, NULL);
NSLog(@"Image header %@",imageHeader);
NSLog(@"PixelHeight %@",[imageHeader objectForKey:@"PixelHeight"]);

用这个你可以得到图像大小,调整UIImageView并获得它的动态高度

为了能够执行此异步操作,您可以使用YYWebImage