我正在为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
的插入,那么当footerView的框架无法知道时,我期望使用什么?
答案 0 :(得分:1)
CGRectInset将根据现有矩形创建一个矩形。它再次没有引用页脚视图:只有在计算它时才这一次。在这种情况下,由于您试图插入一个零大小的矩形,这适用于docs:
<强>讨论即可。 矩形是标准化的,然后是插入参数 应用。如果生成的矩形具有负高度或 width,返回一个空矩形。
因此,您正在使用空矩形创建标签。
我会创建一个“典型”大小的页脚,然后使用你想要的autoResizingMask创建一个适当大小的标签,然后然后将你的footerView设置为零,如果你想要它设置为
答案 1 :(得分: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);