在 layoutSubviews 中调用 setNeedsDisplay?

Posted

技术标签:

【中文标题】在 layoutSubviews 中调用 setNeedsDisplay?【英文标题】:Calling setNeedsDisplay in layoutSubviews? 【发布时间】:2012-11-17 21:07:16 【问题描述】:

考虑在drawRect: 中绘制的具有自定义背景的视图。如果视图改变大小,则需要重新绘制背景。

这是个坏主意吗?

- (void) layoutSubviews

    [super layoutSubviews];
    [self setNeedsDisplay];

如果是,考虑到我无法控制谁更改视图的大小,有什么更好的选择?

【问题讨论】:

【参考方案1】:

不要那样做,没必要。将视图的contentMode设置为UIViewContentModeRedraw

UIViewContentModeRedraw

通过调用 setNeedsDisplay 方法在边界发生变化时重新显示视图。 在 ios 2.0 及更高版本中可用。 在 UIView.h 中声明。

这样会达到同样的效果。

【讨论】:

+1 教我一些新东西。此外,它似乎工作! :) 请注意,在layoutSubviews 中发送setNeedsDisplay 也可以,如果您只需要在某些大小更改上重新绘制,则可能需要这样做。 你能告诉我在哪里添加一行代码来设置contentMode是在init:layoutSubviews()还是?因为我已经在init: 中添加了它,但它对我有用。 @SunilRao 无论您在哪里创建视图都应该没问题

以上是关于在 layoutSubviews 中调用 setNeedsDisplay?的主要内容,如果未能解决你的问题,请参考以下文章

layoutSubviews在以下情况下会被调用

iOS:动画子视图而不调用 layoutSubviews

iOS的layoutSubviews和drawRect方法何时调用

UIView的layoutSubviews和drawRect方法何时调用

UIView的layoutSubviews和drawRect方法何时调用

IOS-layoutSubviews方法的调用时机