旋转屏幕时,带有嵌入式 tableview 的 Collectionview 被剪裁

Posted

技术标签:

【中文标题】旋转屏幕时,带有嵌入式 tableview 的 Collectionview 被剪裁【英文标题】:Collectionview with embeded tableview is clipped when rotating screen 【发布时间】:2018-10-29 07:32:50 【问题描述】:

我创建了一个集合视图,其中一个表格视图嵌入到集合视图单元格中。这个想法是 collectionview 使它能够水平滚动,而 tableview 使它能够垂直滚动每个部分。一切都是使用自动布局在情节提要中设置的,并且可以正常工作,唯一的问题是当我将屏幕从纵向旋转到横向时,如果collectionview或tableview被剪裁,则顶部。

它目前在肖像模式下的外观

目前在横向模式下的外观(这就是问题所在)

我附上了两张图片:一张来自纵向模式,这是它的外观,第二张是横向模式,其中 tableview 中的第一项和 tableview 标题被剪裁。我怀疑视图中的某些内容未正确更新,但我不确定是什么?

提前致谢

【问题讨论】:

只是滚动还是单元格顶部被剪掉了? 我可以向上滚动查看第一个单元格和 tableview 标题,但它很快又弹回来了 这意味着您的表格视图正在屏幕上方绘制。你能确认collectionview的单元格大小对于纵向和横向是否不同? 嗯,旋转时单元格大小似乎相同:在纵向模式下:单元格宽度 375.0 单元格高度 535.0 在横向模式下:单元格宽度 375.0 单元格高度 535.0 检查你的 sizeForItem 委托方法。它应该有条件检查它是纵向还是横向并为每种情况返回不同的大小 【参考方案1】:

请设置集合视图单元格宽度等于集合视图

func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize 
    let width: CGFloat = collectionView.frame.size.width
    let height: CGFloat = SET_HEIGHT_THAT_YOU_WANT //collectionView.frame.size.height
    return CGSize(width: width, height: height)

别忘了设置 UICollectionViewDelegateFlowLayout

【讨论】:

以上是关于旋转屏幕时,带有嵌入式 tableview 的 Collectionview 被剪裁的主要内容,如果未能解决你的问题,请参考以下文章

设备旋转时 TableView Cell 中显示的两个 uibutton

swift 带有嵌入式CollectionView的TableView

滚动整个屏幕而不仅仅是 tableview

Android 片段不保存状态,在旋转/屏幕锁定/返回时崩溃

带有自定义 UITextView 单元格的 TableView 将导航栏滚动到屏幕外

在目标 c 中更改应用扩展的屏幕旋转