【问题标题】:Resize UICollectionView to content size将 UICollectionView 调整为内容大小
【发布时间】:2017-03-13 22:09:21
【问题描述】:

总结:我在堆栈视图中有一个子视图,并且该子视图以编程方式调整大小。它有几个空视图来填充空白空间。但是,在运行时,尝试调整孩子的大小不起作用,并且它的大小与情节提要中的大小相同。如何调整子视图的大小,以便堆栈视图遵循其新大小并相应地定位它。

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

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

我尝试以编程方式更改父级 viewDidLoad 上的集合视图的大小。没用。

我尝试以编程方式更改父级 viewDidLoad 上的集合视图 layoutMargins。没用。

我正在使用 Swift 3、XCode 8。

【问题讨论】:

    标签: ios uistackview


    【解决方案1】:

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

    【讨论】:

    • 实际上,你不需要为了得到collectionView的高度而这样做。您可以在 collectionView 父级的 layoutSubviews() 方法中调用 collection.collectionViewLayout.collectionViewContentSize 以获取其动态计算的大小。希望这会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 2017-07-15
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 2011-02-01
    • 2013-09-21
    • 2021-09-28
    • 1970-01-01
    相关资源
    最近更新 更多