如何设置集合视图的动态高度,'视图'不是'细胞'?

时间:2014-03-16 16:30:52

标签: ios objective-c uicollectionview

我在另一个视图中嵌入了一个集合视图并禁用了集合视图的滚动功能,我想要实现的类似于Instagram的配置文件选项卡。但是,由于单元格的数量是动态的,因此我无法弄清楚在这种情况下如何设置集合视图的高度。

我尝试搜索不同的解决方案,但大多数结果是动态更改单元格而不是集合视图高度本身。是否有任何默认/标准解决方案?

5 个答案:

答案 0 :(得分:6)

设置集合视图所需的宽度(希望是静态的),并请求布局:

collectionView.frame = CGRectMake(0., 0., width, 0.);
[collectionView layoutIfNeeded];

collectView的计算高度将在以下位置提供:

collectionView.contentSize.height

答案 1 :(得分:2)

对于 Swift ,请按以下步骤操作:

在声明部分声明CGFloat变量:

var height : CGFloat!

viewDidAppear您可以通过以下方式获取:

height = self.myCollectionView.collectionViewLayout.collectionViewContentSize().height

也许当您reload数据需要使用新数据计算新高度时,您可以通过addObserver获取它,以便在CollectionView完成重新加载{{1}数据时进行监听}}:

viewWillAppear

然后添加波纹管功能以获得新高度或在override func viewWillAppear(animated: Bool) { super.viewWillAppear(true) .... .... self.shapeCollectionView.addObserver(self, forKeyPath: "contentSize", options: NSKeyValueObservingOptions.Old, context: nil) } 完成重新加载后执行任何操作:

collectionview

不要忘记删除观察者:

override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
        let newHeight : CGFloat = self.myCollectionView.collectionViewLayout.collectionViewContentSize().height

        var frame : CGRect! = self.myCollectionView.frame
        frame.size.height = newHeight

        self.myCollectionView.frame = frame
    }

我希望这可以帮助您快速解决您的问题。

答案 2 :(得分:1)

1)您需要在Storyboard或xibs中为collectionview设置高度限制

2)使heightConstraint出口

3)并在重新引用collectionview时使用此代码

collectionViewHeightConstaint.constant = collectionView.contentSize.height

答案 3 :(得分:0)

在ViewController中,设置collectionView的框架。例如:

    self.collectionView.frame = CGRectMake(0, 0, 100, 200);

答案 4 :(得分:0)

根据您了解细胞高度的事实,您知道屏幕上的细胞数量。我会...

self.collectionView.frame = CGRectMake(0, 0, DEFINED_WIDTH, DEFINED_CELL_HEIGHT*Number of Cells);

还是我想念这个问题?