如何阻止uitextview覆盖uitableviewcell?

所以我在tableview中对UITableViewCell进行了UIView。 我相信这个UIView将是这个表的headerView。

在这个headerView中,我有一个UITextview,并将其内在大小设置为占位符,因此它可以随其内容增长。 出于同样的原因,我还将headerView的内在大小设置为占位符。 现在我面临的问题是,当UITextView变大时,它开始隐藏tableview单元格。

在此处输入图像描述

您需要计算文本视图的大小并在覆盖intrinsicContentSize时返回该大小,然后使用systemLayoutSizeFittingSize:调整标题视图的大小。 文本视图需要固定在单元格的顶部和底部(如果您在文本视图上方有视图,则可以将其固定到那些视图,但这些视图需要固定到单元格的顶部)。 在我的测试应用程序中,我没有对IB中的内在大小设置做任何事情我将其保留为系统定义。 我将文本视图子类化并添加了此代码,

-(CGSize)intrinsicContentSize { CGRect textRect = [self.text boundingRectWithSize:CGSizeMake(self.frame.size.width, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:self.font} context:nil]; return CGSizeMake(textRect.size.width, textRect.size.height + self.textContainerInset.top + self.textContainerInset.bottom); } 

在表视图控制器中,我做了以下操作,以便在设置新文本时看到标题展开,

 - (void)viewDidLoad { [super viewDidLoad]; self.theData = @[@"One",@"Two",@"Three",@"Four",@"Five",@"Six",@"Seven",@"Eight",@"Nine",@"Black",@"Brown",@"Red",@"Orange",@"Yellow",@"Green",@"Blue",@"Violet",@"Gray",@"White"]; self.tableView.tableHeaderView = self.header; [self.tableView reloadData]; [self performSelector:@selector(doStuff) withObject:nil afterDelay:3]; } -(void)doStuff { self.tv.text = @"Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. jfhk gdkj gkf fjkd jkgjhjh khj khkjhk kjh jkhjkh kjhkjhkjh The quick red fox jumped over the lazy brown dog. The end"; CGSize headerSize = [self.header systemLayoutSizeFittingSize:UILayoutFittingCompressedSize]; self.header.frame = CGRectMake(0, 0, headerSize.width, headerSize.height); self.tableView.tableHeaderView = self.header; } 

当我最初在IB中设置约束时,系统给了我一个警告,并提出了几个要改变的事情 – 我只需要将垂直内容压缩阻力优先级更改为749(从750)。 我在这里上传了一个测试应用程序, http://jmp.sh/fLZv7XK