2017-12-17 14 views
1

の底部にビューを移動するために、制約を操作します。ユーザーがセルを選択すると、そのコレクションビューを画面の下部に移動し、UIViewをコレクションビューのすぐ上に表示します。以下はIが容器内に水平および垂直に整列されたコレクションビューを有する画面

は私のコレクションビューが制約されている方法です。 constrains

私がこれについて行ったところでは、ボトムスペースの制約がコードファイルのコンセントになっていました。私はこれをしようとしたときに次に

@IBOutlet var collectionViewBottomConstraint: NSLayoutConstraint! 

セルにタップし、ユーザが、私はここに、この機能が

func showWatchView(selectedPath: Int) { 
     UIView.animate(withDuration: 0.3, animations: { 
      self.collectionViewBottomConstraint.constant = 0 
     }) 
     clipsCollectionView.layoutIfNeeded() 
} 

を走った、それが代わりに下の画面の上部にコレクションビューを移動しました画面をアニメートしなかっただけで、そこに上がった。

+1

あなたは最初のアニメーションの前の制約値を変更する必要があります。それはすぐに変わった。しかし、制約値を変更するときは、self.view.layoutIfNeeded()メソッドを呼び出すことによってビューをレイアウトする必要があります。このメソッドをアノテーションのメソッドに書き込むと、それはアニメーションとともに変化します。それは動作しませんでした、それはまだちょうど消え、 –

+0

- collectionView.bounds.height'は、しかし、コレクションビューの高さになっており、それをアニメーション非常に少ない。どうすれば修正できますか? – vApp

+0

'self.collectionViewBottoConstraint.constant = self.view.bounds.heightをアニメーション化しない – vApp

答えて

0

一定のニーズはあなたがcollectionViewがボトムとself.view.layoutIfNeeded()になるようにしたいので、0

class ViewController: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate { 

    @IBOutlet weak var collectionViewOutlet: UICollectionView! 
    @IBOutlet weak var bottomContraint: NSLayoutConstraint! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     collectionViewOutlet.delegate = self 
     collectionViewOutlet.dataSource = self 
    } 

    func numberOfSections(in collectionView: UICollectionView) -> Int { 
     return 1 
    } 

    func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { 
     return 1 
    } 

    func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell { 

     let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "cell", for: indexPath) 

     return cell 
    } 

    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) { 
     showWatchView(selectedPath: indexPath.item) 
    } 

    func showWatchView(selectedPath: Int) { 
     UIView.animate(withDuration: 0.3, delay: 0, options: .curveEaseOut, animations: { 
      self.bottomContraint.constant = 0 
      self.view.layoutIfNeeded() 
     }, completion: { (completed) in 
      // do something 
     }) 
    } 

} 

に設定するお好みの長さでアニメーション内部で呼び出される必要があります0.3は初心者にとっては大丈夫です。

+0

これは動作しませんでした。まだ消えてアニメーション化されません。 – vApp

+0

'self.collectionViewBottoConstraint.constant = self.view.bounds.height - collectionView.bounds.height'これはアニメーションされますが、コレクションビューの高さは非常に少ない。どうすれば修正できますか? – vApp

+0

コレクションビューを保持したい場合は、コレクションビューの高さに制約を追加してください。 –

関連する問題