ios - Swift:viewDidLayoutSubviews 是什么意思?

标签 ios swift

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

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

我的问题是:

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

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

这里有 2 个类似的问题,但我对它们的理解还不够:

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

2) Why viewdidlayoutsubviews call multiple times?

最佳答案

顾名思义,viewDidLayoutSubviews 在您的 viewController 的 View 刚刚完成布局时被调用,您可以假设此时您的 View 处于正确的位置根据您的 autolayout 约束放置/frame。假设您的 view 在该方法被调用之前有它们的最终 frame,您不应该执行任何操作:例如,如果您尝试 aView setFrame: 在你的 viewDidLoad 它可能会失败/没有效果,因为 autolayout 在布局阶段改变了它的 frame 。因此,如果您确实需要更改其框架,则应在 viewDidLayoutSubviews

中/之后调用 setFrame:

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

关于ios - Swift:viewDidLayoutSubviews 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30591849/

相关文章:

ios - 第二次进入场景,不接受输入

ios - 实例方法 'xyz()'几乎匹配协议(protocol) 'xyz()'的可选要求 'ABDelegate'

Xcode - 解析和 facebook 头文件(SDK)错误

swift - 通过推送在 View 中隐藏标签栏

ios - 跟踪单击哪个 UIAlert 按钮以更改 UILabel

ios - iPhone SDK : Open Default Message tones list

ios - RestKit:现在 `postObject mapResponseWith: delegate:` 已弃用,我该用什么?

xcode - UIButton 上的多次旋转

ios - 核心数据 : Binary Data attribute becomes nil when other attribute is changed

ios - 如何在swift 4中获取今天和明天的日期