避免在UITableView iOS的beginUpdates上重新加载内容

时间:2017-10-26 10:26:07

标签: ios objective-c uitableview

我有一个带有textview的单元格,它有一个view more按钮。按此按钮时,单元格会相应扩展。我打电话了,

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

这些方法正在调用cellForRowAtIndexPath。在cellForRowAtIndexPath方法中,我设置了textview的初始高度(文本缩小时的高度)。使用beginUpdate调用此文本时,文本视图会自动折叠,因为文本视图正在设置初始高度。

我尝试删除beginUpdates,但它只显示了部分文字。不是全文。

在cellForRowAtIndexPath中

 if (self.postTextView.text.length >= 100) {
    CGSize initialHeight = [self calculateHeightForString:(post.fullText.length > 100)?[post.fullText substringToIndex:100]:post.fullText];
    self.textViewHeightConstraint.constant = initialHeight.height + 40;
} else {
    CGSize initialHeight = [self calculateHeightForString:post.fullText];
    self.textViewHeightConstraint.constant = initialHeight.height + 40;
}

收缩文字

UITextView *textView = (UITextView*)((UITapGestureRecognizer *)sender).view;
OCPost *post = [self.parent._posts objectAtIndex:textView.tag];
NSMutableAttributedString *answerAttributed = [[NSMutableAttributedString alloc] initWithString:post.fullText attributes:@{NSFontAttributeName : [UIFont fontWithName:@"SFUIText-Light" size:18.0], NSForegroundColorAttributeName:[UIColor blackColor]}];
self.postTextView.attributedText = answerAttributed;
self.textViewHeightConstraint.constant = [self fullHeightOfString:self.postTextView.attributedText].height + 40;
[self.parent.tableView beginUpdates];
[self.parent.tableView endUpdates];
readMoreGesture.enabled = NO;

我该如何解决这个问题?

提前致谢!

1 个答案:

答案 0 :(得分:1)

您应该将单元格的状态保存在单独的变量中。

我们称之为var isExpanded: Bool = false。当您点按“显示更多”时,状态应设置为true,并在cellForRowAtIndexPath中使用该变量来确定其适当的高度。