我有一个UITableViewCell
包含TWTRTweetView
自动布局的。我正在加载这样的推文:
- (void)loadTweetWithId:(NSString *)tweetId {
if (mTweetId == nil || ![mTweetId isEqualToString:tweetId]) {
mTweetId = tweetId;
[[[TWTRAPIClient alloc] init] loadTweetWithID:tweetId completion:^(TWTRTweet *tweet, NSError *error) {
if (tweet) {
NSLog(@"Tweet loaded!");
[mTweetView configureWithTweet:tweet];
[mTweetView setShowActionButtons:YES];
//[mTweetView setDelegate:self];
[mTweetView setPresenterViewController:self.viewController];
[mTweetView setNeedsLayout];
[mTweetView layoutIfNeeded];
[mTweetView layoutSubviews];
hc.constant = mTweetView.frame.size.height;
[self updateConstraints];
[self layoutIfNeeded];
[self layoutSubviews];
[self.tableView setNeedsLayout];
[self.tableView layoutIfNeeded];
[self.tableView layoutSubviews];
} else {
NSLog(@"Tweet load error: %@", [error localizedDescription]);
}
}];
}
}
当推文加载单元格不会调整大小,除非我将其滚动并向后滚动。正如您在代码片段中看到的那样,我尝试了几种方法。但这些都不是。我的表格视图使用全自动布局方法,它没有为行函数实现单元格高度。我怎样才能解决这个问题?
更新:
使用:
[self.tableView beginUpdates];
[self.tableView endUpdates];
是不可能的,因为当我这样做时,所有单元格都被重绘并且发生了非常大的跳跃,这是不可接受的。我还确认推文完成块在主线程中运行。
更新 2:
我还尝试使用推文 ID 缓存推文视图,并为相关索引路径重新加载单元格,并为推文 ID 提供相同的推文视图。单元格高度已更正,但在向外/向内滚动之前它不会变得可见。
更新 3:
我在单元格的 xib 中为推文视图提供了约束,并且高度约束已连接。所以这不是主线程问题。我还提到在索引处重新加载特定单元格不起作用。
在使用其他解决方案时,我看到了一些示例TwitterKit
代码,它们使用TWTRTweetTableViewCell
但正在预加载推文来配置单元格。所以我也做了同样的事情。这当然是一种解决方法。