带有Autolayout错误的照片扩展故事板

时间:2015-04-14 04:54:31

标签: ios swift ios8-extension

最近我正在为我的应用编写照片扩展程序。

但是,我发现扩展程序的故事板无法正确识别每个视图的框架。

例如我在故事板中设置了这个:

enter image description here

enter image description here

然而,当我运行模拟器时,它显示: enter image description here

另外,当我在didMoveToWindow()中检查自定义视图的框架时,它也显示错误的框架:

  

(66.0,512.0,468.0,30.0)

实际上,自定义滑块在我应用的故事板中运行良好。

我怎么了?

Ps:此处的滑块是自定义UIView而不是UISlider


修改

通过在故事板上将类替换为UIView(带颜色),我现在确定它不是Autolayout约束的问题,因为一切正常。

然后我发现问题在于我在初始化这个自定义的UIView的过程中,我在方法didMoveToWindow()中设置我的旋钮和条,其框架取决于View的框架。当我在didMoveToWindow()顶部打印视图的框架时,框架根本不正确。

因此,在使用Autolayout时,我无法在其didMoveToWindow()方法中获得UIView的正确框架?

但是在我原来的应用程序中工作正常。所以我很困惑。

EDIT2

我使用延迟功能在5秒后重新检查其帧:

func delay(#seconds: Double, completion:()->()) {
    let popTime = dispatch_time(DISPATCH_TIME_NOW, Int64( Double(NSEC_PER_SEC) * seconds ))
    dispatch_after(popTime, dispatch_get_main_queue()) {
    completion()
    }
}
override func didMoveToWindow() {
    delay(seconds: 5, {
        println(self.frame)
    })
}

5秒后,框架正确!因此,当调用该方法时,尚未应用约束。所以现在我需要做的是当它的superView的ViewController完成ViewDidLoad时在UIView中回调。

EDIT3

我找到了答案。我应该在UIView的layoutSubviews()方法中设置subView的框架。在这种情况下,我可以在使用Autolayout时获得正确的框架。

实际上,在应用了UIView的约束之后,它会调用它的layoutSubviews()

2 个答案:

答案 0 :(得分:1)

阅读本条=>它可以帮助你很多:)

learn-to-love-auto-layout  如果你想要LOVE AUTO LAYOUT… PROGRAMMATICALLY 1 i/p image 2 i/p image out put image

答案 1 :(得分:0)

不是给出尾随和前导空格,而是应用这个简单的约束。

  1. 让你的身高保持不变(如果你想!)
  2. 将UIView放在容器的中心
  3. 给出“容器中的水平中心”约束
  4. 应用适当的“顶部空间”和“底部空间”
  5. 就是这样!你已经完成了。