在swift中设置框架并不像预期的那样工作

时间:2015-04-22 17:24:43

标签: ios swift autolayout

我将一个应用程序从Objective-C移植到纯粹的Swift中,我面临着一个奇怪的问题。

我已经获得了AlertView类,它替换了标准UIAlertView(现在为UIAlertController),用于显示可设置动画的弹出窗口。 AlertView是在UIViewController扩展程序中创建的 - 它以视图控制器的视图框架为基础并添加为子视图。

AlertView有一个属性,它是PopupView的实例 - 带有xib的自定义UIView子类(在Autolayout上)。此弹出窗口应具有动态高度取决于其内容(多行消息标签)。

现在,当我尝试在AlertView课程中设置此弹出窗口的动画时:

  • 当我设置PopupView setTranslatesAutoresizingMaskIntoConstraints(false)时 - 视图的高度正确但在动画中设置其框架并不按预期工作 - 视图粘贴在左上角< / LI>
  • 当我设置setTranslatesAutoresizingMaskIntoConstraints(true)时 - 动画按预期工作但是视图的大小来自xib(根据内容不会扩展)

这里有什么不妥?

EDIT 显示弹出方法:

private func showPopup(popupView: PopupView)
{
    var beginFrame = popupView.frame
    beginFrame.origin.y = -beginFrame.size.height
    beginFrame.origin.x = self.bounds.size.width/2 - beginFrame.width/2
    popupView.frame = beginFrame

    var endFrame = beginFrame
    endFrame.origin.y = self.bounds.size.height/2 - endFrame.size.height/2

    popupView.hidden = false
    DLog(beginFrame)

    UIView.animateWithDuration(kAnimationTime, delay: 0, usingSpringWithDamping: kAnimationDamping, initialSpringVelocity: kAnimationSpringVelocity, options: UIViewAnimationOptions.CurveEaseIn, animations:
        { () -> Void in
            DLog(endFrame)
            popupView.frame = endFrame
    }, completion: nil)
}

在两种情况下都显示在控制台中:

(72.5,-155.0,230.0,155.0)

(72.5,256.0,230.0,155.0)

EDIT2

setTranslatesAutoresizingMaskIntoConstraints(false)

set-false

setTranslatesAutoresizingMaskIntoConstraints(true)

set-true

1 个答案:

答案 0 :(得分:1)

好的,得到了​​解决方案。我已经停止混合自动布局和直接帧修改,而是使用纯自动布局。