gpt4 book ai didi

ios - 旋转后获取正确的可读ContentGuide

转载 作者:行者123 更新时间:2023-12-03 21:14:16 25 4
gpt4 key购买 nike

我有一个嵌套的collectionView,我想在旋转后获取它的可读ContentGuide,以便正确设置内容插入。

这就是它的样子:

enter image description here

我已经尝试对 Collection View 进行子类化并从 layoutMarginsDidChangetraitCollectionDidChangelayoutSubviews 获取值。

但是,我得到的值始终是之前的值(即,当我处于纵向时,我得到横向值,反之亦然)

我还尝试在collectionView的collectionView(_:layout:insetForSectionAt:)中设置插图。

目前,唯一有效的解决方案似乎是观察 Collection View 的边界,但这感觉有点hacky。

对于如何做到这一点有什么想法吗?

最佳答案

如果您在 Storyboard 上使用自动布局,您应该激活 super View 的“遵循可读宽度”选项。首先,确保 Collection View 附加到 super View 的边距。然后转到 super View 并打开 Size Inspector,然后选择选项:
Follow Readable Width
感谢马特 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 的 layoutMarginsDidChangetraitCollectionDidChange,也无需观察 边界。布局代码的最佳位置是 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com