热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iPhoneX上的横向UICollectionView

如何解决《iPhoneX上的横向UICollectionView》经验,为你挑选了3个好方法。

当使用横向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产生所需的结果,即最初以纵向方向时:

初始肖像布局

然后当旋转到横向时,细胞被插入,使得它们完全在安全区域内:

iPhone X横向集合视图布局

...但是,目前存在一个错误,当视图处于横向状态旋转回纵向时,它继续表现为好像左/右safeAreaInsets设置为横向值:

从景观旋转后的纵向布局

关于这个问题我已经提交了雷达(rdar:// 34491993).



3> anorskdev..:

感谢以上的帮助.对于我的UICollectionViewController子类,我将以下内容添加到viewDidLoad()(Swift 3):

if let flowLayout = collectionView?.collectionViewLayout as? UICollectionViewFlowLayout {
    if #available(iOS 11.0, *) {
        flowLayout.sectiOnInsetReference= .fromSafeArea
    }
}


推荐阅读
author-avatar
mobiledu2502884963
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有