【问题标题】:Table View Animation not working properly while adding ViewController on a Container View?在容器视图上添加 ViewController 时表视图动画无法正常工作?
【发布时间】:2015-04-24 08:41:33
【问题描述】:

我目前在屏幕左侧设置了我的表格视图,以便我可以从那里为它设置动画,如下所示:

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
}

问题是当我点击表格视图单元格后试图隐藏菜单时:

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 到 x 轴上 -self.view.frame.size.width 位置的动画.

hideMenu 函数被调用。

已编辑:在使用 None 进行数小时的调试后,我发现在选择方法时我的错误就行了,我将视图控制器分配给 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)。抱歉发了这么长的帖子..

如果我评论该行动画效果很好..但是视图没有添加到我的主视图中...我该如何解决这个问题?

【问题讨论】:

    标签: ios uitableview swift animation


    【解决方案1】:

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

    初始

    在移除约束后,它会是这样的。

    希望对您有所帮助。

    【讨论】:

    • @anishparajuli,您的代码整洁干净。您的代码似乎是 write 。所以很难找出问题。
    • 逻辑上可能有一些问题:(
    • 您是否检查过hidemenu() 是否在您的didSelect 方法被调用后被调用?
    • 是的..它正在调用........有趣的是我得到了按钮的结果......但是当点击单元格时为什么不呢?
    • 这里是示例代码。请从网址下载。 drive.google.com/file/d/0B7kttc3BOG13bDNObklfTmwzbnc/…
    【解决方案2】:
     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()
    
            }
    
        }
    

    【讨论】:

    • 这是不好的方法,-500 对于某些设备可能不够,您应该始终使用您尝试制作动画的 vie 的大小。另外,这对 OP 有什么帮助?在每次点击单元格时,您将隐藏整个 tableview(没有动画),将其移动到其父视图的 -500 处,然后设置动画、显示或隐藏在这种情况下,hide 将什么也不做,因为 tableview 是屏幕的 -500
    • @IxPaka 是的..这有效,但是当我调用用于按钮操作的隐藏菜单功能时为什么不呢?
    • self.tblView.frame = CGRectMake(-self.view.frame.size.width, 48, self.tblView.frame.size.width, self.tblView.frame.size.height)那就去吧
    猜你喜欢
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 2017-08-29
    • 1970-01-01
    相关资源
    最近更新 更多