【发布时间】:2012-10-10 20:22:55
【问题描述】:
根据 UIView 上关于contentMode 属性的官方文档:
The content mode specifies how the cached bitmap of the view’s layer is adjusted when the view’s bounds change
这个定义中的内容是什么定义的?它是子视图还是当我们为视图定义了背景颜色时。
我的第一个猜测是,它至少应该适用于视图中的子视图,但例如以下代码 sn-p 在使用UIViewContentModeCenter 标签时不会给我预期的结果:
UIView* redView = [[UIView alloc] initWithFrame:CGRectMake(80, 80, 150, 200)];
redView.contentMode = UIViewContentModeCenter;
redView.backgroundColor = [UIColor redColor];
UIView* greenView = [[UIView alloc] initWithFrame:redView.bounds];
greenView.backgroundColor = [UIColor greenColor];
[redView addSubview:greenView];
redView.frame = CGRectInset(redView.frame, -5, -5);
[self.view addSubview:redView];
我刚刚设置了一个包含 greenView 的 redView。我还将 redview 的内容模式设置为 UIViewContentModeCenter - 为什么在我编写的代码中,当我更改其父级的框架时,greenView 没有居中?这不是UIViewContentModeCenter 应该做的吗?
感谢您的澄清!
Ps:您可以在一个简单的视图控制器模板项目的loadView中轻松测试上述代码。
【问题讨论】:
-
肯定通过调整框架,您将重绘包含设置为正在更改的框架边界的子视图的视图?因此它不会保持居中,因为边界是相对于框架的?用简单的英语使用边界作为框架,您的原点始终为 0,0 并且匹配的宽度和高度
标签: ios5 uiview contentmode uiview-hierarchy