将 autoResizingMask 与 CGRectZero 一起使用
Posted
技术标签:
【中文标题】将 autoResizingMask 与 CGRectZero 一起使用【英文标题】:Using autoResizingMask with CGRectZero 【发布时间】:2012-12-16 20:21:30 【问题描述】:我正在为 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?)。但是,如果我将 inset 设置为 0、0,它会按预期扩展。
对此有何解释?如果我不能在初始帧中使用 CGRectZero
的插图,那么当无法知道 footerView 的帧时我应该使用什么?
【问题讨论】:
【参考方案1】:CGRectInset 将基于现有矩形创建一个矩形。它不再引用页脚视图:仅当它计算它这一次时。在这种情况下,由于您试图插入一个大小为零的矩形,这适用于文档:
讨论。 矩形是标准化的,然后插入参数是 应用。如果生成的矩形的高度为负数或 宽度,返回一个空矩形。
因此,您正在使用空矩形创建标签。
我会创建一个“典型”大小的页脚,然后是一个带有你想要的 autoResizingMask 的适当大小的标签,然后 然后 将你的 footerView 设置为零(如果这是你想要的设置) .
【讨论】:
你的最后一句话是正确答案,除了你不需要将框架设置为零。通过表格视图将页脚调整为适当的大小,因此如果您需要边距、布局等,可以选择任意大小。 @jrturton:是的,但他似乎出于某种原因希望它为零,这样做没有害处。 谢谢。是的,不需要将其设置回零,我只是在没有其他任何东西的情况下使用它。【参考方案2】:我猜想 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);
【讨论】:
以上是关于将 autoResizingMask 与 CGRectZero 一起使用的主要内容,如果未能解决你的问题,请参考以下文章
@property(nonatomic) UIViewAutoresizing autoresizingMask;
UIView AutoresizingMask 用于将按钮固定到右下角