我无法让这个工作。我在当前视图控制器上使用autolayout。我有一个UITableView,它有节标题,每个节标题都有UITextView,文本的长度根据章节而变化。我无法自动扩大其高度以适应内容,因此不需要滚动(其内容属于文本)
- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section
{
//UITextView *tv = [[UITextView alloc] init];
//tv.editable = NO;
//tv.attributedText = [self millionaireResults][section][@"header"];
//return tv;
return [self millionaireResults][section][@"headerview"]; //this is a uitextview
}
// this did not workeither
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
UITextView *tv = [self millionaireResults][section][@"headerview"];
return tv.frame.size.height;
}
如何解决这个问题?
我根据Michael的建议更新了代码
答案 0 :(得分:1)
将您的“UITextView *tv
”对象设为属性,然后您可以执行以下操作(假设您的表视图只有一个部分):
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
return (self.tv.frame.size.height);
}
如果你有更多的部分(你可以看到),你应该将该属性作为UITextView对象的NSArray。
这也意味着您需要在“tv
”被调用之前设置“viewForHeaderInSection:
”对象的内容。
答案 1 :(得分:0)
这是对我有用的答案
这是身高计算(我在这个网站上发现了这个http://www.raywenderlich.com/50151/text-kit-tutorial)
- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section
{
UITextView *tv1 = (UITextView *)[self millionaireResults][section][@"headerview"];
// sizethatfits calculates the perfect size for this UITextView
// if you gave your UITextView full width
CGSize goodsize = [tv1 sizeThatFits:tv1.frame.size];
return goodsize.height+4; // here 4 is not necessary, i just put it as an offset
}
以下是创建这些UITextView对象的代码
for (int i = 0; i < [milarr count]; i++) {
UITextView *tv = [[UITextView alloc] init];
tv.editable = NO;
tv.attributedText = milarr[i];
// labelTopTitle and this table in question have same width in an autoLayouted view
// so i am giving width of labelTopTitle to let UITextView cover full available
// horizontal space
tv.frame = CGRectMake(0, 0, self.labelTopTitle.frame.size.width,FLT_MAX);
//tv.backgroundColor = [UIColor grayColor];
//tv.textContainerInset = UIEdgeInsetsZero;
tv.scrollEnabled = NO;
[results addObject:@{@"headerview": tv,
@"rows":@[...]
}
];
}