我需要一些帮助来理解在UIView上使用contentStretch属性。我很感激1)关于如何实现我想要的效果的一些指导和2)对如何使用这个属性存在的任何综合文档的引用。虽然我认为我理解Apple文档,但我现在看到我没有。这就是我想要做的。
我有一个自定义UIView,它呈现一个看起来像图a的视图。下面。此UIView的drawRect方法绘制左侧的内框(带有圆角和白色背景),其颜色和效果与用于视图的其余部分的颜色和效果不同。此外,UIView的4个角落不可伸缩(这会导致失真)所以我只需要拉伸UIView背景的中心。
我希望将此视图增加到类似于图b中所示的形状。下面。这样做我只希望在增加UIView的高度时拉伸/重复白色框外(或白框右侧)的视图部分。
在我的所有尝试中,我只能产生影响视图整个宽度的strecth,并产生类似于图c的视图。
我是否有可能使用contentStretch达到我想要的效果(图b。)?是否还有一些其他技术我不应该重新绘制整个视图,或者重新绘制唯一(或最好)的方法来解决这个问题?
谢谢,
答案 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)
由于不推荐使用内容扩展,最好的方法是使用自动布局。在内部矩形中,给定一个定义的高度和宽度常量,并将其顶部和前导约束绑定到父视图。 为了在外部矩形中获得底部增长,绑定其底部约束,或者您也可以选择它的高度。