UIView 背景图像被压扁

Posted

技术标签:

【中文标题】UIView 背景图像被压扁【英文标题】:UIView background image gets squashed 【发布时间】:2011-05-07 11:24:31 【问题描述】:

在我的 iPhone 应用程序中,我有一个 UIView,其中包含通过 view.backgroundColor = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"IndexCard.png"]]; 创建的平铺背景图像

在我的 ios3.1 设备上,当视图调整大小时,背景图像会被压扁 - 即它平铺相同的次数,但每个平铺的高度会降低。相反,我希望每个图块保持相同的大小,但重复次数要根据新的视图大小进行调整。如果我清除背景然后重置它,问题就会得到解决,但这似乎是解决问题的一个特别低效的解决方案。在iOS4.3模拟器上可以正常运行。

这是原始图像 - 12 行:

这是我在调整视图大小时看到的 - 它仍然有 12 行:

而这是我真正想看到的 - 背景将被裁剪为 5 行:

有什么想法吗?

【问题讨论】:

【参考方案1】:

视图的backgroundColor 属性为CALayer 指定颜色(或图案),这是绘制视图的基础。您可以通过寻址视图的 layer 属性来更改 CALayer 的属性。

查看CALayer Class Reference,我看到有一个名为contentsGravity 的属性:

确定接收者的内容如何 位于其范围内。

表示:

contentsGravity 的可能值显示在“Contents Gravity Values”中。默认值为kCAGravityResize

这就解释了为什么你的图片会被这样压扁:默认情况下它会调整图片的大小。查看其他 Contents Gravity Values 有几个选项可能最适合您:

kCAGravityTop: 内容在边界矩形的上边缘水平居中。

kCAGravityCenter:内容在边界矩形中水平和垂直居中。

'kCAGravityBottom':内容在边界矩形的底部边缘水平居中。

我猜kCAGravityTop 可能是您要查找的内容,因此您可以像这样设置视图层的contentsGravity

view.layer.contentsGravity = kCAGravityTop;

【讨论】:

【参考方案2】:

我找到了一个更简单的解决方案:

view.contentMode = UIViewContentModeRedraw;
// instead of the default UIViewContentModeScaleToFill

【讨论】:

以上是关于UIView 背景图像被压扁的主要内容,如果未能解决你的问题,请参考以下文章

ImageIcon 被压扁的颤动

Apple iphone导致按钮在网站上被压扁

日期选择器看起来像文本字段的输入一样被压扁

UIView背景颜色和顶部透明png

为啥这个混淆矩阵(matplotlib)在 Jupyter Notebook 中看起来被压扁了? [复制]

由于对象被压扁而检测节点中的重叠