在View视图中添加ViewController时,表视图动画无法正常工作?

时间:2015-04-24 08:41:34

标签: ios uitableview swift animation

我目前在屏幕左侧设置了我的桌面视图,以便我可以从下面设置动画,如下所示:

override func viewDidAppear(animated: Bool) {
    tblView.frame = CGRectMake(-self.view.frame.size.width, 48, self.tblView.frame.size.width, self.tblView.frame.size.height)
}

现在我已经设置了一个按钮,可以将tableview从 - self.view.frame.size.width设置为0,如下所示,这样可以正常工作:

@IBAction func showMenu(sender: AnyObject) {
    self.tblView.hidden = false    
    if flag == false{
        showMenu()
    } else {
        hidemenu()
    }
}

func showMenu(){
    UIView.animateWithDuration(0.3, animations:{
        self.tblView.frame = CGRectMake(0, 48, self.tblView.frame.size.width, self.tblView.frame.size.height)
    } )
    flag = true
}

func hidemenu(){
    UIView.animateWithDuration(0.3, animations:{
        self.tblView.frame = CGRectMake(-self.view.frame.size.width, 48, self.tblView.frame.size.width, self.tblView.frame.size.height)
    } )
    flag = false
}

问题是当我在点击tableview单元格后尝试隐藏菜单时,如下所示:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
    var row = indexPath.row
    var storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    switch row {
    case 0:           
        hidemenu()
        println("hide menu")
        if firstVC == nil{
            firstVC  = storyboard.instantiateViewControllerWithIdentifier("firstVC") as? FirstViewController
        }
        activeViewController = firstVC
    default:
        println("no index")
    }
}

tableview没有向左隐藏,而是动画看起来是从右边开始到0结束。相反,我正在寻找动画从0到-self.view.frame.size.width位置在x轴上

hideMenu函数被调用。

已编辑:使用None进行了数小时的调试后,我发现我的错误是在行中,当执行select方法时,我将视图控制器分配给containerView的内容视图

  func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

        hidemenu()
        var row = indexPath.row
        var storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)

        switch row {                
        case 0:             

            if firstVC == nil{

                firstVC  = storyboard.instantiateViewControllerWithIdentifier("firstVC") as? FirstViewController
            }                
            activeViewController = firstVC
.....           
}

我有变量声明为

 var activeViewController : UIViewController? {            
        didSet{
            removeInactiveViewController(oldValue)
            updateActiveViewController()
        }
    }

  func updateActiveViewController(){            

        if let activeVC = activeViewController{

            activeVC.view.frame = contentView.bounds
            contentView.addSubview(activeVC.view)//this line gives me error
            activeVC.didMoveToParentViewController(self)

        }

    }

在动画中向下钻取错误是在内容视图上添加activeVC作为contentView.addSubview(activeVC.view)。很抱歉很长的帖子..

如果我评论该行动画效果正常..但视图未添加到我的主视图中...我如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

实际上,您通过手动设置框架来应用动画,并且您已经设置了AutoLayout约束。所以这是内部冲突。请将UITableView constraintsstoryboard移除,并且工作正常。

初​​始

enter image description here

并在删除约束后,它看起来像。

enter image description here

希望这对你有所帮助。

答案 1 :(得分:0)

 func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

        var row = indexPath.row
        var storyboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)


        self.tblView.hidden = true
        flag = false
         ........
}

并将其更改为

 @IBAction func showMenu(sender: AnyObject) {

        if self.tblView.hidden == true{
            self.tblView.frame = CGRectMake(-500, 48, self.tblView.frame.size.width, self.tblView.frame.size.height)

        }

        self.tblView.hidden = false

        if flag == false{

            displayMenu()

        }else{

          hidemenu()

        }

    }