当设备方向改变时导致子视图重绘的正确方法是啥?

Posted

技术标签:

【中文标题】当设备方向改变时导致子视图重绘的正确方法是啥?【英文标题】:what's the right way to cause a subview to redraw when the device orientation changes?当设备方向改变时导致子视图重绘的正确方法是什么? 【发布时间】:2010-12-31 03:03:24 【问题描述】:

我有一个带有一个视图和一个子视图的视图控制器。当设备方向更改时,视图会自动重绘,但子视图不会。如果我明确地执行 [subview setNeedsDisplay] 它会重绘,但我没有一个合乎逻辑的位置来将该调用放入我的代码中。而且,由于我不必明确告诉视图重绘,所以告诉子视图重绘似乎违反直觉。有没有办法让子视图在视图重绘时自动重绘?

【问题讨论】:

【参考方案1】:

我发现以下工作。如果这不是最好的方法,请提供更好的方法。

subview.m 文件中的initWithFrame: 方法中包含以下内容

self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
self.contentMode = UIViewContentModeRedraw;

尽管这很有效并且非常适合我的代码,但我不明白为什么子视图需要设置这些属性而视图不需要。

【讨论】:

【参考方案2】:

Swift 3/ios10 语法:

    self.autoresizingMask = [.flexibleWidth, .flexibleHeight]
    self.contentMode = .redraw

【讨论】:

这很有效,但是如果有人能解释为什么会很棒。

以上是关于当设备方向改变时导致子视图重绘的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

触发drawRect重绘视图的按钮

更改设备方向时重绘自定义 uiview

Web前端性能优化-重绘与回流

WM_PAINT消息在窗口重绘的时候产生,那什么时候窗口会重绘(异步工作方式,效率更高,灵活性更强)

tableView、视图层次结构和重绘的绝对定位

SwiftUI 强制子视图重绘