首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在CGRectZero中使用autoResizingMask

在CGRectZero中使用autoResizingMask
EN

Stack Overflow用户
提问于 2012-12-17 04:21:30
回答 2查看 2.2K关注 0票数 2

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

代码语言:javascript
复制
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    UIView *footerView = [[UIView alloc] initWithFrame:CGRectZero];
    footerView = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
    footerView = [UIColor greenColor];
    return footerView;
}

这与预期的一样--表视图的页脚完全被绿色视图填充。

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

代码语言:javascript
复制
{
    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?)。但是,如果我将inset设置为0,0,它会像预期的那样扩展。

对此有何解释?如果我不能为初始帧使用CGRectZero的嵌入,那么当footerView的帧不能被知道时,我应该使用什么呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-17 04:46:34

CGRectInset将基于现有矩形创建一个矩形。它再也不会引用页脚视图了:只有在这次计算时才会引用。在本例中,由于您尝试插入一个大小为零的矩形,因此这适用于文档:

Discussion。对矩形进行标准化,然后应用嵌入参数。如果结果矩形的高度或宽度为负值,则返回一个空矩形。

因此,您正在创建带有空矩形的标签。

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

票数 1
EN

Stack Overflow用户

发布于 2012-12-17 04:30:52

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

代码语言:javascript
复制
CGSize size = [aString sizeWithFont:[UIFont systemFontOfSize:12.0] constrainedToSize:CGSizeMake(320,500) lineBreakMode:NSLineBreakByWordWrapping];
CGRect frame = CGRectMake(0, 0, size.width, size.height);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13905144

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档