ios与layoutSubviews相反的是啥

Posted

技术标签:

【中文标题】ios与layoutSubviews相反的是啥【英文标题】:ios what is opposite of layoutSubviewsios与layoutSubviews相反的是什么 【发布时间】:2013-07-02 20:24:30 【问题描述】:

我有一个在自己的类中退出的视图,带有自己的 xib。

这个视图被初始化并作为一个子视图添加到我的 viewController 视图中。

当视图初始化时,方法 layoutSubviews 被调用,我在视图中自定义一些东西。

但是当视图从父视图中移除时调用哪个方法(如果有的话)?

例如,对于 ViewController,调用 viewWill/DidDisappear。有没有类似于 UIView 的方法(与 layoutSubviews 相对)?

提前致谢

---编辑---

我刚刚找到了一个在添加和删除子视图时都会调用的方法:

- (void)willMoveToSuperview:(UIView *)newSuperview

如果 newSuperview == 0,您可以自定义删除子视图。

我是对的还是处理这种情况的俗气?

【问题讨论】:

我想你已经找到了最好的解决方案,但我的问题是为什么你需要知道何时从布局中删除视图? "didMoveToWindow" 似乎是您正在寻找的。当接收器刚刚从其父视图中移除或接收器刚刚添加到未附加到窗口的父视图时,就会发生这种情况。如果不感兴趣,则此方法的覆盖可能会选择忽略此类情况。 @DanF 感谢您的评论。我需要它,因为我有点使用它而不是视图控制器。这是一个小视图,我认为它会更轻。 @ldindu 感谢您的评论。在添加子视图时也会调用 didMoveToWindow。我只对“删除”子视图感兴趣。 willMoveToSuperview 包含 newSuperView 参数,在这种情况下很有帮助:) 【参考方案1】:

但是当视图从父视图中移除时调用哪个方法(如果有的话)?

-removeFromSuperview 被调用,因此如果在删除视图时需要做一些内务处理,您可以覆盖它。记得打电话给super的版本。

-layoutSubviews 不一定只在视图添加到父视图时调用——它在需要布局时调用。例如,它可能在方向改变时被调用,或者当超级视图再次布局时,或者当视图的框架改变时。真的没有 -layoutSubviews 的倒数,因为不需要。 (它会叫什么?-messupSubviews?;-))

【讨论】:

覆盖 removeFromSuperview 是我认为的最佳解决方案!谢谢!我正在使用 uiview 子类作为“更轻”的视图控制器。 顺便说一句,我确实了解 layoutSubviews 的功能,我在添加时使用它来自定义视图。有没有更好的办法?

以上是关于ios与layoutSubviews相反的是啥的主要内容,如果未能解决你的问题,请参考以下文章

与单体 Web 应用程序相反的词是啥?

iOS的layoutSubviews和drawRect方法何时调用

showViewController:sender 的相反程序是啥:

iOS 8 自定义标签 LayoutSubviews 方法永远不会被调用?

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

iOS开发之layoutSubviews的作用和调用机制