如何以编程方式设置集合视图的大小

时间:2017-08-01 12:00:14

标签: swift xcode

我有一个集合视图,它形成一个15 x 15的网格。我想将它的高度和宽度设置为包含它的视图高度的0.5(或某个倍数)。我在故事板中完成了这个并将宽高比设置为1:1。

enter image description here

我的问题是,当我将屏幕旋转到横向时,网格不再是15 x 15。

enter image description here

我可以直接在故事板中设置高度,例如300 x 300但是我遇到了让它适合不同设备的问题。

3 个答案:

答案 0 :(得分:0)

您可以在集合视图中添加相等宽度和相等高度约束,以获取它所在的超级视图。然后将约束乘数编辑为0.5,如下图所示 - enter image description here

答案 1 :(得分:0)

您遇到此问题,因为横向模式下的高度低于纵向高度。所以,如果你设置宽度& UICollectionView的高度限制相等(有些乘数)到superview它会在您旋转设备时自动更改大小

你可以做什么呢?连接宽度&代码中的高度出口,并在viewDidLoad方法

中设置适当的值

答案 2 :(得分:0)

试试这个

extension MYViewController: UICollectionViewDelegateFlowLayout {
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
        return CGSize(width: collectionView.frame.width/15, height: collectionView.frame.height/15)
    }
}

添加这些行

override func viewWillLayoutSubviews() {
        guard let flowLayout = collectionView.collectionViewLayout as? UICollectionViewFlowLayout else {
            super.viewWillLayoutSubviews()
            return
        }
        flowLayout.invalidateLayout()
        super.viewWillLayoutSubviews()
    }