如何将 UICollectionView 的大小更改为屏幕大小的一个因素?

Posted

技术标签:

【中文标题】如何将 UICollectionView 的大小更改为屏幕大小的一个因素?【英文标题】:How to change the size of a UICollectionView as a factor of screen size? 【发布时间】:2017-07-12 03:44:03 【问题描述】:

UICollectionView 嵌入在 UIViewController 中。要求是让UICollectionView 的高度始终等于屏幕尺寸的一半。到目前为止已经尝试过的是:

override func viewWillAppear(_ animated: Bool) 
  self.caCollectionView.frame.size.width = self.view.frame.size.width
  self.caCollectionView.frame.size.height = self.view.frame.size.height / 2

这在构建和运行时似乎没有生效。 有什么遗漏吗? 请帮忙。提前谢谢你。

添加的屏幕截图:粉色区域为UIViewController,白色区域为UICollectionView

【问题讨论】:

显示当前输出/截图。 @Imad 请查看更新后的输出/屏幕截图。感谢您的回复。 你使用约束吗? @anhtu 没有使用任何故事板约束。谢谢。 【参考方案1】:

你也向上移动底视图吗?

override func viewWillAppear(_ animated: Bool) 
  self.caCollectionView.frame.size.width = self.view.frame.size.width
  self.caCollectionView.frame.size.height = self.view.frame.size.height / 2
  self.pickAnotherView.frame.origin.y = self.caCollectionView.frame.origin.y+self.caCollectionView.frame.size.height
  self.pickAnotherView.frame.height = self.view.frame.height-self.caCollectionView.frame.size.height

您可以在带有约束的情节提要上执行此操作。

    设置等高 将乘数设置为 0.5(视图高度的一半)

【讨论】:

非常乐意帮助您。 :)【参考方案2】:

始终在 viewDidLayoutSubviews 中更新 Frame 并使用 bounds 而不是 frame。

喜欢

override func viewDidLayoutSubviews()
  

        super.viewDidLayoutSubviews()
        self.caCollectionView.frame.size.width = self.view.bounds.size.width 
        self.caCollectionView.frame.size.height = self.view.bounds.size.height / 2
  

【讨论】:

@Jaydeep Vyas 感谢您的回复。我尝试根据您的代码进行更新,但仍然得到相同的输出。请参考我得到的输出截图。已在原帖中更新。 @asdiu 我认为您的图像数量较少尝试使用更多图像,而对于较少数量的图像,您必须增加 collectionview 单元格大小.. 一定会尝试的。再次感谢您。

以上是关于如何将 UICollectionView 的大小更改为屏幕大小的一个因素?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 UICollectionView 项目的大小调整为具有集合视图高度的正方形大小?

如何调整 uicollectionview 单元格中 imageview 的位置?

iOS:将 UICollectionView 单元格设置为视图大小

如何将我的 UICollectionView Flowlayout 更改为具有水平滚动的垂直列表

如何根据里面的 UILabel 子视图调整 UICollectionView 中的单元格大小

如何删除 UICollectionView Flow 布局大小中的单元格空间?