【问题标题】:viewDidAppear & viewDidLoad Are Are Initializing Positions Too LateviewDidAppear 和 viewDidLoad 初始化位置太晚了
【发布时间】:2014-12-20 15:59:19
【问题描述】:

我希望在应用程序中加载时更新故事板中的 UIView(并从故事板实例化)。

我需要以动态方式放置一些图标(界面构建器还不允许我这样做)。但是,如果我将代码放在 viewDidAppear 或 viewDidLoad 中,似乎调用得太晚了。

这是视图加载后前几秒或两秒发生的情况:

稍后它会转到正确的位置(调用代码时)。

我的问题是我需要在哪里初始化这些对象的位置,这样它们就不会在一秒钟后捕捉到。 viewDidLoad 和 viewDidAppear 来不及了?为什么!? :)

override func viewDidAppear(animated: Bool)
{
    initView()
    _gridLines = false

}

func initView()
{
    _cameraFeed.initAfterLoad()
    //center the buttons on half distance between middle button and screen edge
    var middleDistance:CGFloat = _swapButton.frame.origin.x + _swapButton.frame.width/2
    _linesButton.frame.origin.x = middleDistance/2 - _linesButton.frame.width/2
    _flashButton.frame.origin.x = middleDistance + middleDistance/2 - _flashButton.frame.width/2
    _selectPhotos.frame.origin.x = middleDistance/2 - _selectPhotos.frame.width/2
}

欢迎 Swift 和 objc 回答!

【问题讨论】:

  • 我在您的第二张图片中看不到任何无法在 IB 中设置约束的内容。 IB不允许你做什么?
  • 您可以在这里查看问题:stackoverflow.com/questions/26477049/…
  • 我发布了该问题的答案

标签: ios objective-c xcode swift interface-builder


【解决方案1】:

尝试将设置框架的代码放在 viewWillAppear 而不是 viewDidAppear 中。

另外,你应该打电话给super。

override func viewWillAppear(animated: Bool) {
    initView()
    _gridLines = false

    super.viewWillAppear(animated)
}

【讨论】:

  • 遗憾的是这不起作用:(。事实上它甚至没有移动图标,它们只是在右侧冻结
猜你喜欢
  • 2014-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-12
  • 2012-12-11
  • 1970-01-01
相关资源
最近更新 更多