我在Swift 4中的集合视图上以编程方式执行页眉和页脚时出现问题。这是我在iPhone X上的应用程序的图像:
我想将标题扩展到屏幕的最顶部(在凹槽区域中)和页脚,直到屏幕的实际结束。我该怎么做?
答案 0 :(得分:0)
来自tylerf
的{{1}}(Apple员工,可能还有@smileyborg):
如果您在集合视图中使用流布局,则可以使用 部分插图,以确保您的集合视图中的内容保持不变 在安全区域内。你可以使用新的 UICollectionViewFlowLayout.sectionInsetReference属性(设置为 .fromSafeArea)所以这会自动发生。
然而,我的内容仍然滚动到我的页脚视图并进入安全区域,就像屏幕截图所示。相反,我确定了安全区域:
self.safeAreaLayoutGuide = [UILayoutGuide new];
[self addLayoutGuide:safeAreaLayoutGuide];
[NSLayoutConstraint activateConstraints:@[
[safeAreaLayoutGuide.topAnchor constraintEqualToAnchor:self.topAnchor],
[safeAreaLayoutGuide.leadingAnchor constraintEqualToAnchor:self.leadingAnchor],
[safeAreaLayoutGuide.bottomAnchor constraintEqualToAnchor:self.bottomAnchor],
[safeAreaLayoutGuide.trailingAnchor constraintEqualToAnchor:self.trailingAnchor],
]];
然后,在我的-layoutSubviews
方法中,我可以使用bounds
插入safeAreaLayoutGuide.layoutFrame
:
UIEdgeInsets safeAreaEdgeInsets =
UIEdgeInsetsMake(CGRectGetMinY(safeAreaLayoutGuide.layoutFrame),
CGRectGetMinX(safeAreaLayoutGuide.layoutFrame),
CGRectGetHeight(self.bounds) - CGRectGetMinY(safeAreaLayoutGuide.layoutFrame) - CGRectGetHeight(safeAreaLayoutGuide.layoutFrame),
CGRectGetWidth(self.bounds) - CGRectGetMinX(safeAreaLayoutGuide.layoutFrame) - CGRectGetWidth(safeAreaLayoutGuide.layoutFrame));
self.collectionView.frame = UIEdgeInsetsInsetRect(self.bounds, safeAreaEdgeInsets);