我有一个使用流布局的UICollectionView
,我试图实现与具有可读内容宽度的UITableViewController
相同的边距。
最接近这种布局行为的方法是将UICollectionViewController
嵌入到UIViewController
中,并具有嵌入式视图“Follow Readable Width”。
这里蓝绿色是UIViewController
,鲑鱼色是UICollectionViewController
。问题是蓝绿色区域没有滚动UICollectionView
,滚动指示器也没有像你期望的那样沿着屏幕边缘。
我的问题是:
如何在不嵌入UICollectionViewController
的情况下实现这种布局?
我的猜测是,我可以通过某种方式设置UICollectionView
左右部分的插图,以匹配可读的内容指南边距,并通过覆盖viewWillTransition(to size: with coordinator:)
和观察UIContentSizeCategoryDidChange
通知来更新它们,但我不知道如何做到这一点。
3条答案
按热度按时间zbq4xfa01#
为了解决Swift 5.1和iOS 13的问题,你可以将flow layout的
sectionInsetReference
属性设置为.fromContentInset
,将collection view的insetsLayoutMarginsFromSafeArea
属性设置为false
,并将collection view的contentInset
s设置为匹配view
的readableContentGuide
的insets。下面的示例代码显示了一个可能的实现,以便拥有一个具有可读内容宽度的集合视图:
在iPhone 11 Pro Max上显示:
eivgtgni2#
你的直觉是正确的,最简单的方法是通过集合视图的
insetForSection
。根据我的经验,需要以下内容:directionalLayoutMargins
作为插入(使用.leading
和.trailing
collectionView.insetsLayoutMarginsFromSafeArea = false
禁用自动安全区处理view.readableContentGuide.layoutFrame.origin.x
手动设置集合视图的directionalLayoutMargins
。请注意,我使用的是 view.readableContentGuide,而不是collectionView
。viewLayoutMarginsDidChange
执行以下操作时,以完全相同的方式更新directionalLayoutMargins
如果知道如何在没有任何类型的容器的情况下实现这一点,那就太好了
3qpi33ja3#
在iOS 14+上,如果数据源是可区分的,则可以使用
section.contentInsetsReference = .readableContent
。这将调整部分插图并遵循可读指南。