将UICollectionView调整为内容大小



总结:我在stackview中有一个子视图,并且该子视图是通过编程调整大小的。它有几个空视图来填充空白的空间。然而,在运行时,调整子元素大小的尝试不起作用,它仍然保持与故事板中相同的大小。如何调整子视图的大小,使堆栈视图遵循其新大小并相应地定位它?

细节:我有一个带有自定义布局的UICollectionView。布局正确地计算子视图的位置(它们显示在我想要的位置)并返回正确的内容大小。内容尺寸比屏幕窄,但根据方向可能更长。

自定义布局返回正确的计算大小,但集合视图不调整大小。

我已经尝试以编程方式改变父的viewDidLoad上的集合视图的大小。没有工作。

我已经尝试以编程方式改变父视图的viewDidLoad上的集合视图的layoutmargin。没有工作。

我使用Swift 3, XCode 8.

如果我理解你的问题,你需要你的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高度约束设置为占位符约束(检查"在构建时删除")

相关内容

  • 没有找到相关文章

最新更新