在CGRectZero中使用autoResizingMask

时间:2012-12-16 20:21:30

标签: ios cocoa-touch uitableview uiview autoresizingmask

我正在为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的框架无法知道时,我期望使用什么?

2 个答案:

答案 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);