使用contentStretch拉伸UIView的一部分

时间:2012-02-22 03:41:07

标签: iphone objective-c ios ipad uiview

我需要一些帮助来理解在UIView上使用contentStretch属性。我很感激1)关于如何实现我想要的效果的一些指导和2)对如何使用这个属性存在的任何综合文档的引用。虽然我认为我理解Apple文档,但我现在看到我没有。这就是我想要做的。

我有一个自定义UIView,它呈现一个看起来像图a的视图。下面。此UIView的drawRect方法绘制左侧的内框(带有圆角和白色背景),其颜色和效果与用于视图的其余部分的颜色和效果不同。此外,UIView的4个角落不可伸缩(这会导致失真)所以我只需要拉伸UIView背景的中心。

我希望将此视图增加到类似于图b中所示的形状。下面。这样做我只希望在增加UIView的高度时拉伸/重复白色框外(或白框右侧)的视图部分。

sketch1

在我的所有尝试中,我只能产生影响视图整个宽度的strecth,并产生类似于图c的视图。

sketch2

我是否有可能使用contentStretch达到我想要的效果(图b。)?是否还有一些其他技术我不应该重新绘制整个视图,或者重新绘制唯一(或最好)的方法来解决这个问题?

谢谢,

4 个答案:

答案 0 :(得分:1)

要使用contentStretch实现此目的,您必须设置contentStretch矩形,使其顶部边缘位于下边缘白色方框,以及边缘是白色框右边缘的。你可能会发现你的背景图案太过拉伸而且看起来很丑。

相反,请为您的视图提供仅绘制白框的子视图。设置子视图的弹簧和支柱,使盒子保持在左上方并且不会拉伸。

答案 1 :(得分:0)

我会让白色盒子在顶部伸展,并使用colorWithPatternImage填充图案的背景视图:

patternView.backgroundColor = [UIColor colorWithPatternImage:@"myBackgroundPattern.png"];

黑色笔画可以用:

完成
#include <QuartzCore/QuartzCore.h>
...
patternView.layer.borderWidth = 2.f;
patternView.layer.borderColor = [[UIColor blackColor] CGColor];

答案 2 :(得分:0)

您尝试实现的目标可以使用UIImage的resizableImageWithCapInsets方法完成。这样,您可以在图像的每一侧设置上限宽度,并指定图像的哪个部分需要重复(未拉伸)。

UIEdgeInset是一个由四个组件组成的结构,如下所示(CGFloat topCapWith,CGFloat leftCapWith,CGFloat bottomCapWith,CGFloat rightCapWith)

下面的代码可以解决问题

UIImage * backgroundImage = [[UIImage imageNamed:@"Stretch.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(80, 4, 4, 10)];
    backgroundImageView.image = backgroundImage;

答案 3 :(得分:0)

由于不推荐使用内容扩展,最好的方法是使用自动布局。在内部矩形中,给定一个定义的高度和宽度常量,并将其顶部和前导约束绑定到父视图。 为了在外部矩形中获得底部增长,绑定其底部约束,或者您也可以选择它的高度。