【问题标题】:Stretching a portion of a UIView using contentStretch使用 contentStretch 拉伸 UIView 的一部分
【发布时间】:2012-03-12 10:14:12
【问题描述】:

我需要一些帮助来理解在 UIView 上使用 contentStretch 属性。我很感激 1) 关于如何实现我想要的效果的一些指导,以及 2) 对现有的关于如何使用此属性的任何综合文档的参考。虽然我认为我了解 Apple 文档,但现在我发现我不了解。这就是我想要做的。

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

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

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

我是否可以使用 contentStretch 实现我想要的效果(图 b.)?除了重新绘制整个视图之外,我还应该使用其他一些技术,还是重新绘制唯一(或最好)的方法?

谢谢,

【问题讨论】:

    标签: iphone objective-c ios ipad uiview


    【解决方案1】:

    要使用contentStretch 实现这一点,您必须设置contentStretch 矩形,使其顶部 边缘低于白框的底部边缘,因此它的 left 边缘位于白框右边缘的 right 上。您可能会发现您的背景图案被过度拉伸并且看起来很丑。

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

    【讨论】:

    • 上面的数字有点误导。它们只是我实际视图的简化线框(用于说明目的)。在我的实际视图中,白框是一个透明的(alpha = 0)窗口,所以我不知道如何使它成为子视图并且仍然让它像背景上的窗口一样。至于将 contentStretch 矩形设置为在白框下方和右侧,(这是我担心我必须尝试的)我没有足够的空间来执行此操作,因为白框下方的区域位于不可拉伸的区域(拉伸会导致背景变形)。
    • 在这种情况下,只需使用UIViewContentModeRedraw 并在drawRect: 中绘制您需要的内容。
    • 这是我所担心的,也是我所期望的。谢谢,
    【解决方案2】:

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

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

    黑色笔画可以用:

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

    【讨论】:

      【解决方案3】:

      您想要实现的目标可以使用 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;
      

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-03-17
          • 2011-09-19
          • 1970-01-01
          • 2014-04-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-04
          相关资源
          最近更新 更多