Swift:viewDidLayoutSubviews 是啥意思?

Posted

技术标签:

【中文标题】Swift:viewDidLayoutSubviews 是啥意思?【英文标题】:Swift: What is the meaning of viewDidLayoutSubviews?Swift:viewDidLayoutSubviews 是什么意思? 【发布时间】:2015-06-02 09:10:44 【问题描述】:

我在viewDidLayoutSubviews 下有代码,目的是在开始时使图像透明(alpha = 0),然后慢慢淡入(变为 alpha = 1),代码在viewDidAppear 下。另外,我有一个按钮,按下时会更改它自己的标签文本。

但是,当按下按钮并且标签发生变化时,图像(我在viewDidLayoutSubviews 下指定)也会消失。我认为是因为viewDidLayoutSubviews下的代码被调用了?

我的问题是:

1)viewDidLayoutSubviews是什么意思?为什么在按钮标签更改时调用它?简单地说/一般来说,setNeedsLayoutsetNeedsDisplayInRect 是什么?

2) 那么使用 viewWillAppear 会更好吗?

这里有 2 个类似的问题,但我无法从他们那里得到足够的理解:

1) viewDidLayoutSubviews is called when label changes (xcode) (swift)

2) Why viewdidlayoutsubviews call multiple times?

【问题讨论】:

【参考方案1】:

顾名思义,viewDidLayoutSubviews 在您的 viewController 的视图刚刚完成布局时调用,您可以假设此时您的视图位于正确的位置/frames 根据您的@ 987654324@ 约束。假设您的views 在调用该方法之前具有最终的frames,则不应执行任何操作:例如,如果您尝试在viewDidLoad 中使用aView setFrame:,它可能会失败/无效,因为autolayout 在布局阶段更改其frame。因此,如果你真的需要改变它的框架,你应该在viewDidLayoutSubviews中/之后调用setFrame:

简而言之,如果您关心imageimageView 的alpha 值,viewDidLayoutSubviews 可能不是正确的位置。 viewDidAppear 似乎更适合这个。 viewDidAppear 非常简单:当视图出现在屏幕上时,它就会被调用。

【讨论】:

【参考方案2】:

您是否尝试过阅读文档? viewDidLayoutSubviews、setNeedsLayout 等等?

按钮标签更改 -> 宽度更改 -> 重新排列 -> viewDidLayoutSubviews。 您不应将viewDidLayoutSubviews 视为单个呼叫事件。您应该在viewDidAppearUIView.animateWithDuration 中启动图像透明度动画,这是一个很好的起点,因为一切都正确对齐。在 IB 或 init 方法中让图像 alpha 为 0,然后对其进行动画处理。

【讨论】:

我想邀请你回答这个问题***.com/questions/32678975/…

以上是关于Swift:viewDidLayoutSubviews 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

swift [Swift Notes]在学习Swift #Swift的同时收集笔记

Swift 反射

Swift入门系列--Swift官方文档(2.2)--中文翻译--About Swift 关于Swift

swift 示例BS swift.swift

swift swift_bug.swift

ios 整理(一)swift和oc的区别