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
是什么意思?为什么在按钮标签更改时调用它?简单地说/一般来说,setNeedsLayout
和 setNeedsDisplayInRect
是什么?
2) 那么使用 viewWillAppear 会更好吗?
这里有 2 个类似的问题,但我无法从他们那里得到足够的理解:
1) viewDidLayoutSubviews is called when label changes (xcode) (swift)
2) Why viewdidlayoutsubviews call multiple times?
【问题讨论】:
【参考方案1】:顾名思义,viewDidLayoutSubviews
在您的 viewController
的视图刚刚完成布局时调用,您可以假设此时您的视图位于正确的位置/frame
s 根据您的@ 987654324@ 约束。假设您的view
s 在调用该方法之前具有最终的frame
s,则不应执行任何操作:例如,如果您尝试在viewDidLoad
中使用aView setFrame:
,它可能会失败/无效,因为autolayout
在布局阶段更改其frame
。因此,如果你真的需要改变它的框架,你应该在viewDidLayoutSubviews
中/之后调用setFrame:
简而言之,如果您关心image
或imageView
的alpha 值,viewDidLayoutSubviews
可能不是正确的位置。 viewDidAppear
似乎更适合这个。 viewDidAppear
非常简单:当视图出现在屏幕上时,它就会被调用。
【讨论】:
【参考方案2】:您是否尝试过阅读文档? viewDidLayoutSubviews、setNeedsLayout 等等?
按钮标签更改 -> 宽度更改 -> 重新排列 -> viewDidLayoutSubviews
。
您不应将viewDidLayoutSubviews
视为单个呼叫事件。您应该在viewDidAppear
和UIView.animateWithDuration
中启动图像透明度动画,这是一个很好的起点,因为一切都正确对齐。在 IB 或 init 方法中让图像 alpha 为 0,然后对其进行动画处理。
【讨论】:
我想邀请你回答这个问题***.com/questions/32678975/…以上是关于Swift:viewDidLayoutSubviews 是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章
swift [Swift Notes]在学习Swift #Swift的同时收集笔记