作者:mobiledu2502884963 | 来源:互联网 | 2023-01-18 10:33
当使用横向iPhone X时,您应该检查safeAreaInsets以在左侧和右侧制作适当大的水槽.UITableView具有新insetsContentViewsToSafeArea
属性(默认为true),可自动将单元格内容保存在安全区域中.
我很惊讶UICollectionView似乎没有类似的东西.我希望对于垂直滚动的集合视图,左侧和右侧在横向时将插入安全区域(相反,如果需要纵向插入水平滚动的集合视图).
确保此行为的最简单方法似乎是添加到集合视图控制器:
- (void)viewSafeAreaInsetsDidChange {
[super viewSafeAreaInsetsDidChange];
UIEdgeInsets cOntentInset= self.collectionView.contentInset;
contentInset.left = self.view.safeAreaInsets.left;
contentInset.right = self.view.safeAreaInsets.right;
self.collectionView.cOntentInset= contentInset;
}
...假设contentInset.left/right通常为零.
(注意:是的,对于UICollectionViewController,需要self.view.safeAreaInsets
;在调用此时,更改为safeAreaInsets
奇怪尚未传播到self.collectionView
)
我错过了什么吗?该样板很简单,但现在对于触及屏幕边缘的每个集合视图都是有效的.Apple默认情况下没有提供启用它的功能,这似乎很奇怪.
1> petrsyn..:
有同样的问题.这对我有用:
override func viewDidLoad() {
if #available(iOS 11.0, *) {
collectionView?.cOntentInsetAdjustmentBehavior= .always
}
}
该文档的.always
枚举情况下,说:
始终在内容调整中包含安全区域插入.
在手机旋转的情况下,此解决方案也能正常工作.
2> Wes Campaign..:
虽然Nathan对各种布局的UICollectionView的多功能性是正确的,但我主要关注的是"默认"情况,其中一个使用UICollectionViewFlowLayout.
事实证明,iOS 11已经添加了一个sectionInsetReference
属性UICollectionViewFlowLayout
.关于它的官方文档目前缺乏描述,但标题将其描述为
该部分插入的参考边界将被定义为相对于.默认为.fromContentInset
.
注意:内容插入始终至少得到尊重.例如,如果sectionInsetReference等于.fromSafeArea
,但调整后的内容插入大于安全区域和节插入的组合,则节内容将与内容插入对齐.
可能的值是
@available(iOS 11.0, *)
public enum UICollectionViewFlowLayoutSectionInsetReference : Int {
case fromContentInset
case fromSafeArea
case fromLayoutMargins
}
并将其设置为.fromSafeArea
产生所需的结果,即最初以纵向方向时:
然后当旋转到横向时,细胞被插入,使得它们完全在安全区域内:
...但是,目前存在一个错误,当视图处于横向状态后旋转回纵向时,它继续表现为好像左/右safeAreaInsets设置为横向值:
关于这个问题我已经提交了雷达(rdar:// 34491993).
3> anorskdev..:
感谢以上的帮助.对于我的UICollectionViewController子类,我将以下内容添加到viewDidLoad()(Swift 3):
if let flowLayout = collectionView?.collectionViewLayout as? UICollectionViewFlowLayout {
if #available(iOS 11.0, *) {
flowLayout.sectiOnInsetReference= .fromSafeArea
}
}