2017-12-17 2 views
1

컨테이너에 가로 및 세로로 정렬 된 컬렉션보기가 있습니다. 사용자가 셀을 선택하면 해당 콜렉션 뷰가 화면 아래쪽으로 이동하게하고 컬렉션 뷰 바로 위에 UIView를 표시하려고합니다.제약 조건을 조작하여보기를 화면 하단으로 이동하십시오.

다음은 내 컬렉션보기의 제약 사항입니다. constrains

이렇게 내가가는 방법은 맨 아래 공간 제약 조건을 내 코드 파일의 콘센트로 만드는 것입니다. I이 시도 될 때 그런

@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

그것은 작동하지 않았다. 여전히 사라져서 애니메이션을 움직이지 않는다. – vApp

+0

'self.collectionViewBottoConstraint.constant = self.view.bounds.height - collectionView.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

컬렉션보기의 높이에 제약 조건을 추가했는지 확인하십시오. –

관련 문제