在不调整大小或重绘的情况下扩展 UIView
Posted
技术标签:
【中文标题】在不调整大小或重绘的情况下扩展 UIView【英文标题】:Expanding a UIView without resizing or redrawing 【发布时间】:2012-08-06 22:58:23 【问题描述】:是否有可能有一个 UIView 可以重复设置其框架,例如在正 x 轴上增加其大小,但不调整大小或压缩图像?
我想例如将 CGPath 绘制到 320 x 100 帧中,但仅显示帧在 x 值上增加,y 值为 100,因此它在扩展时显示图像。编辑:我已经绘制了 CGPath,但它当前会随着容纳它的框架展开而调整大小。
因此视图不应该重绘或调整其内容的大小,而是将其内容固定在适当的位置,但是当它的框架放大时,只有更多的图像变得可见。
有没有办法做到这一点?
【问题讨论】:
【参考方案1】:如果您在其drawRect:
方法中绘制了视图,则视图的contentMode
属性将确定当其框架更改时视图的内容会发生什么。
contentMode
的值在UIViewContentMode
in the UIView
Class Reference 下进行了描述。
默认情况下,视图的contentMode
是UIViewContentModeScaleToFill
:
如有必要,通过更改内容的纵横比来缩放内容以适应自身的大小。
听起来你可能想要UIViewContentModeTopLeft
:
对齐视图左上角的内容。
【讨论】:
谢谢。我确实使用drawRect绘制了viewcontroller的视图,然后我在IB中这个viewController的视图中放置了另一个UIView,并且那个UIView调用了它自己的drawRect函数。两个视图都正确绘制,它们是彼此的副本,所以我想创建一个进度效果,但慢慢地显示在原件顶部的副本。问题是没有任何 contentMode 设置允许这样做。 谢谢罗伯。您的回答结合大卫的评论解决了它。【参考方案2】:如果我理解你,你有一个主视图和一个 UIImageView 作为子视图。如果您将 UIImageView 的 autoResizingMask 设置为不调整大小 - 它只是锚定到左侧 x 和 y 轴 - 应该这样做。
【讨论】:
谢谢。但是它在文档中说“此属性的默认值是 UIViewAutoresizingNone,这表明根本不应该调整视图的大小。” 所以,您从未绝对说过 CGPath 是 UIImage。我刚刚创建了一个项目,向其中添加了一个 UIImageView,添加了一个更改容器视图宽度的按钮,并且图像没有调整大小。所以,如果你有一个containerView,它的clipsToBounds=YES,和一个你想公开的UIImage的子视图,你慢慢地不断增加containerView的宽度,它就会慢慢公开。 对不起,但这对我不起作用。我有一个覆盖drawRect的视图,它包含另一个视图,它的drawRect被覆盖以将原始路径的重复路径应用于UIImage。然后我使用这个 UIImage 来设置 UIImageView 的图像(这是第二个视图的子视图)所以 mainView>secondView>ImageView.image.I 已经在这些视图上尝试了 clipsToBounds,没有任何变化。我得到了显示路径的原始视图,然后重复应用的 UIImage 是可见的,但是随着它的扩展适合视图内部,路径是否全部被压扁并慢慢拉伸到其实际大小 好的,可以了!! :) 我不得不将您的答案与 Rob 的答案结合起来。 UIImageView 还需要在 IB 中将其模式设置为“左上角”。以上是关于在不调整大小或重绘的情况下扩展 UIView的主要内容,如果未能解决你的问题,请参考以下文章
用户在不使用 QLayout 的情况下扩展/调整 QTextBrowser 小部件的大小
在不停止 stackView 自动调整大小的情况下对齐图像视图