- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个嵌套的collectionView,我想在旋转后获取它的可读ContentGuide
,以便正确设置内容插入。
这就是它的样子:
我已经尝试对 Collection View 进行子类化并从 layoutMarginsDidChange
、traitCollectionDidChange
和 layoutSubviews
获取值。
但是,我得到的值始终是之前的值(即,当我处于纵向时,我得到横向值,反之亦然)
我还尝试在collectionView的collectionView(_:layout:insetForSectionAt:)
中设置插图。
目前,唯一有效的解决方案似乎是观察 Collection View 的边界,但这感觉有点hacky。
对于如何做到这一点有什么想法吗?
最佳答案
如果您在 Storyboard 上使用自动布局,您应该激活 super View 的“遵循可读宽度”选项。首先,确保 Collection View 附加到 super View 的边距。然后转到 super View 并打开 Size Inspector,然后选择选项:
感谢马特 the answer .
对于编程式自动布局,您不需要边距,只需将 Collection View 附加到 super View 的readContentGuide
即可。像这样:
let cv = collectionView
// Guide of the superview
let readableGuide = view.readableContentGuide
NSLayoutConstraint.activateConstraints([
cv.topAnchor.constraintEqualToAnchor(readableGuide.topAnchor),
cv.bottomAnchor.constraintEqualToAnchor(readableGuide.bottomAnchor),
cv.rightAnchor.constraintEqualToAnchor(readableGuide.rightAnchor),
cv.leftAnchor.constraintEqualToAnchor(readableGuide.leftAnchor)
])
如果您更喜欢基于框架的编程布局,则无需使用 super View 的 layoutMarginsDidChange
、traitCollectionDidChange
,也无需观察 边界
。布局代码的最佳位置是 Controller 的 viewWillLayoutSubviews() 函数。这将处理任何边界更改,包括界面旋转。
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
collectionView.frame = view.readableContentGuide.layoutFrame
collectionView.collectionViewLayout.invalidateLayout()
}
Here我解释了为什么我们需要 invalidateLayout()
。
关于ios - 旋转后获取正确的可读ContentGuide,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61063547/
我是一名优秀的程序员,十分优秀!