2014-11-22 84 views
0

所以我有一个UITableViewCell在tableview中的UIView。我相信这个UIView将是这个表的headerView。如何停止覆盖uitableviewcell的uitextview?

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

enter image description here

+0

你在做什么来增加文本视图的大小?你有没有设置它,所以它会自动增长,你键入,或者你增加“手动”的代码?它是不是滚动? – rdelmar 2014-11-22 16:19:18

+0

是的,正如我上面提到的(我有一个UITextview,并将其内部大小设置为占位符,因此它可以随其内容增长),因此它会根据其内容自动增长。 – thirdage 2014-11-22 20:01:55

+0

当我在你的问题中提到设置后,我不能让我的文本视图增长。你有滚动吗?你对它的超级观点有什么限制?除了将其固有内容大小设置为占位符之外,您是否对超视图执行了任何操作? – rdelmar 2014-11-22 21:22:40

回答

0

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

-(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