2016-10-31 11 views
4

要約:私は、スタックビュー内に子ビューを持ち、プログラマチックサイズの子ビューを持っています。それは空の空間を埋めるためにいくつかの空のビューを持っています。しかし、実行時に、子のサイズを変更しようとすると、ストーリーボードと同じサイズになりません。子ビューのサイズを変更して、スタックビューが新しいサイズに合わせてそれに応じて配置するようにするにはどうすればよいですか?UICollectionViewをコンテンツサイズに調整する

詳細: 私はカスタムレイアウトのUICollectionViewを持っています。レイアウトは、サブビューの位置を正しく計算し(正しい位置に表示します)、正しいコンテンツサイズを返します。コンテンツのサイズは画面よりも狭いですが、方向によってはもっと長くなる可能性があります。

カスタムレイアウトは正しい計算サイズを返しますが、コレクションビューのサイズは変更されません。

親のviewDidLoadでコレクションビューのサイズをプログラム的に変更しようとしました。うまくいきませんでした。

親のviewDidLoadでコレクションビューのlayoutMarginsをプログラムで変更しようとしました。うまくいきませんでした。私はあなたの質問を理解していれば、私はスウィフト3、XCodeの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高さの制約を設定することを忘れないでください(「ビルド時に削除する」にチェック)

関連する問題