2016-10-31 3 views
4

요약 : 스택 뷰 내에 하위보기가 있고 프로그래밍 방식으로 크기가 조정 된 하위보기가 있습니다. 빈 공간을 채우는 몇 ​​가지 빈보기가 있습니다. 그러나 런타임에는 하위 크기 조정 시도가 작동하지 않으며 스토리 보드의 크기와 동일하게 유지됩니다. 스택 뷰가 새 크기를 따르고 그에 맞게 배치되도록 하위 뷰의 크기를 조정할 수 있습니까?UICollectionView를 콘텐츠 크기에 맞게 조정하십시오.

세부 정보 : 사용자 지정 레이아웃이있는 UICollectionView가 있습니다. 레이아웃은 하위 뷰의 위치를 ​​올바르게 계산하여 (원하는 위치에 표시) 정확한 컨텐트 크기를 반환합니다. 콘텐츠 크기는 화면보다 좁지 만 방향에 따라 더 길 수도 있습니다.

사용자 지정 레이아웃이 올바른 계산 된 크기를 반환하지만 컬렉션보기의 크기가 조정되지 않습니다.

부모의 viewDidLoad에서 컬렉션보기의 크기를 프로그래밍 방식으로 변경해 보았습니다. 일하지 않았어.

부모의 viewDidLoad에서 컬렉션보기의 layoutMargins을 프로그래밍 방식으로 변경해 보았습니다. 일하지 않았어. 나는 당신의 질문을 이해하면 내가 스위프트 3, 엑스 코드 (8)

답변

4

을 사용하고

, 당신은 그 크기가 즉, 그 내용과 동일하도록하여 UICollectionView이 필요합니다, 당신은 당신의 UICollectionView이 (고유 크기를 갖고 싶어 텍스트를 기반으로 자동으로 크기가 조정되는 레이블과 비슷합니다.

이 경우에는 하위 클래스 UICollectionView을 사용하여이 동작을 추가 할 수 있습니다. 그러면이 크기를 설정할 필요가 없습니다.

class IntrinsicSizeCollectionView: UICollectionView { 
    // MARK: - lifecycle 
    required init?(coder aDecoder: NSCoder) { 
     super.init(coder: aDecoder) 
     self.setup() 
    } 

    override init(frame: CGRect, collectionViewLayout layout: UICollectionViewLayout) { 
     super.init(frame: frame, collectionViewLayout: layout) 

     self.setup() 
    } 

    override func layoutSubviews() { 
     super.layoutSubviews() 
     if !self.bounds.size.equalTo(self.intrinsicContentSize) { 
      self.invalidateIntrinsicContentSize() 
     } 
    } 

    override var intrinsicContentSize: CGSize { 
     get { 
      let intrinsicContentSize = self.contentSize 
      return intrinsicContentSize 
     } 
    } 

    // MARK: - setup 
    func setup() { 
     self.isScrollEnabled = false 
     self.bounces = false 
    } 
} 

PS : 당신의 .xib에서 (체크 "빌드시에 제거")

자리 제약로 IntrinsicSizeCollectionView 높이 제약 조건을 설정하는 것을 잊지 마세요
관련 문제