2

我正在为 tableview 部分构建页脚。页脚的高度将在 中指定heightForFooterInSection,因此viewForFooterInSection我只想添加子视图并指定页脚视图应填充指定的任何页脚高度(此页脚大小将是动态的)。因此,我将CGRectZero其用作初始框架并告诉页脚视图展开以填充其父视图。

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    UIView *footerView = [[UIView alloc] initWithFrame:CGRectZero];
    footerView = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
    footerView = [UIColor greenColor];
    return footerView;
}

这按预期工作 - 表格视图的页脚完全被绿色视图填充。

但现在我想UITextView在页脚中添加一个。文本视图应填充相同的空间,但留下 5 点边框:

{
    UIView *footerView = [[UIView alloc] initWithFrame:CGRectZero];
    footerView = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
    footerView = [UIColor greenColor];

    UITextView *textView = [[UITextView alloc] initWithFrame:CGRectInset(footerView.frame, 5, 5)];
    textView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
    textView.backgroundColor = [UIColor redColor];

    [footerView addSubview:textView];
    return footerView;
}

文本视图根本不出现,而不是填充页脚视图(有 5 磅的边距)。它可能有一个框架CGRectZero(甚至可能是-5 x -5?)。但是,如果我将插图设置为 0、0,它会按预期扩展。

对此有何解释?如果我不能CGRectZero在初始帧中使用 inset,当无法知道 footerView 的帧时,我应该使用什么?

4

2 回答 2

1

CGRectInset 将基于现有矩形创建一个矩形。它不再引用页脚视图:仅在它计算一次时。在这种情况下,由于您试图插入一个大小为零的矩形,这适用于文档:

讨论。矩形被标准化,然后应用插入参数。如果生成的矩形的高度或宽度为负,则返回空矩形。

因此,您正在使用空矩形创建标签。

我将创建具有“典型”大小的页脚,然后创建一个带有您想要的 autoResizingMask 的适当大小的标签,然后将您的 footerView 设置为零,如果这是您想要的设置。

于 2012-12-16T20:46:33.647 回答
0

我猜想 TextView 在后台创建内容,所以在初始化时它是空的。我通常最终使用[string sizeWithFont:constrainedToSize:lineBreakMode:]

CGSize size = [aString sizeWithFont:[UIFont systemFontOfSize:12.0] constrainedToSize:CGSizeMake(320,500) lineBreakMode:NSLineBreakByWordWrapping];
CGRect frame = CGRectMake(0, 0, size.width, size.height);
于 2012-12-16T20:30:52.373 回答