我有一个具有TextView的自定义UITableViewCell。并且通过AutoLayout通过TextView的文本长度更改单元格高度 单元格具有文本的设置器(注释),并且在调用setter时,单元格上的TextView文本被更改。但是,当输入长文本而不是之前的文本时,TextView高度不会改变,并且单元格高度也不会改变。因此,单元格无法显示新的全文。在调用setter之前,我也更改了数据源。因此,在滚动并隐藏单元格之后,通过重新显示单元格,单元格具有新的TextView高度,可以显示新的全文。
所以,我认为如果我在更改文本时可以重绘单元格,单元格会显示新的矩形,问题就不算什么了。
我尝试了[cell setNeedsLayout]
和[tableView reloadRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone]
。
但是,无法重绘细胞。
CustomCell.h
@interface CustomCell :UITableViewCell
@property (nonatomic, copy) NSString *comment;
@end
CustomCell.m
@interface CustomCell ()
@property (weak, nonatomic) IBOutlet UITextView *commentTextView;
@end
@implementation CustomCell
- (void)setComment:(NSString *)comment {
_comment = [comment copy];
self.commentTextView.text = _comment;
[self.commentTextView sizeToFit];
}
@end
如果有人知道重力表演,请告诉我。
答案 0 :(得分:0)
设置textView的高度约束。设置textView的文本时,请计算高度并重新设置。
/* set textView text and height */
textView.text = @""; // your text here
CGSize sizeThatFitsTextView = [textView sizeThatFits:CGSizeMake(textView.frame.size.width, MAXFLOAT)];
textViewHeightConstraint.constant = sizeThatFitsTextView.height;
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(nonnull NSIndexPath *)indexPath {
return UITableViewAutomaticDimension;
}