【问题标题】:Why is viewDidLayoutSubviews called multiple times?为什么多次调用 viewDidLayoutSubviews?
【发布时间】:2015-01-16 19:47:24
【问题描述】:

我正在使用 Swift 开发 iOS 通用应用程序,使用自动布局并且仅支持纵向。

我发现UIViewController.viewDidLayoutSubviews 被多次调用。相反,viewDidLoad 仅在启动 MyApp 的 UIViewController 时被调用一次。

为什么viewDidLayoutSubviews 会被多次调用?每个UIViewUIButtonsUITextFields等)的约束是否会按顺序执行?

任何信息将不胜感激。

【问题讨论】:

    标签: ios swift autolayout


    【解决方案1】:

    LoadView 只被调用一次:当需要加载视图时。

    LayoutSubviews,然而,在调用了setNeedsLayoutsetNeedsDisplayInRect 的任何视图上,每个运行循环都会调用一次——这包括每当将子视图添加到视图、滚动、调整大小等时。

    【讨论】:

    • 你能解释一下什么是 setNeedsLayout 和 setNeedsDisplayInRect 吗?我无法理解链接页面..
    • 检查 this comment 以获得关于 setNeedsLayout 的良好解释
    【解决方案2】:

    最好的办法,这对我很有帮助 - 养成在你不确定的方法中添加日志或打印语句的习惯

    我用这个->

    print("Hello From \(NSStringFromSelector(#function))")
    

    如果在视图子类中,则为这个

    Swift.print("Hello From \(NSStringFromSelector(#function))")
    

    它会在被调用时打印方法。

    【讨论】:

      猜你喜欢
      • 2022-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-20
      • 2014-09-01
      相关资源
      最近更新 更多