动态 UICollectionView -> 错误和视觉布局问题
Dynamic UICollectionView -> errors and visual layout problems
这是我要复制的视图:
我假设它是 UICollectionView
。宽度和高度应该根据内容动态计算,这是我纠结的一点。
我创建了一个项目,其中 UICollectionView
的行为与我想要的不一样:https://github.com/Jasperav/CollectionViewDynamic/blob/master/UIKitTest/ViewController.swift。您可以直接 运行 项目然后自己查看问题。
每次添加新的Emoji
,都可以调用reloadData
方法,UICollectionView
的大小应该等于内容的大小但是有一个最大宽度。
这是添加 1 个表情符号时的样子(可怕):
真的很奇怪,单元格没有居中,我在控制台中出现布局错误。当添加 2 个表情符号时,我希望排成一行,但它们最终会排在彼此下面...
有足够的 space 单元格可以并排放置。
我究竟做错了什么?当我检查可视化调试器中的值时,我正确地计算了单元格的大小。我想我正在做很多手动工作来确保 UICollectionView
尺寸正确,但我没有做对。
我是不是把东西复杂化了?我想要的东西对我来说看起来很基本。不过,这是我第一次使用 UICollectionView
做一些事情。
这是addEmoji
方法的样子,整个代码可以在我上面提到的link中看到:
func addEmoji(emoji: Emoji) {
emojis.append(emoji)
var width: CGFloat = 0
for emoji in emojis {
width += emoji.size().width
}
let finalWidth = min(width, 280)
// Add some breath
widthAnchor_.constant = finalWidth + 5
reloadData()
heightAnchor_.constant = collectionViewLayout.collectionViewContentSize.height
}
我对你的代码做了一些小的改动,现在一切正常(改动用评论标记 // NEW
):
https://gist.github.com/sa1dai/b50bec10438b439a8c74cc6e8071bcf4?ts=4
关键思想不是在addEmoji
函数中更新heightAnchor_.constant
,而是使用contentSizeObservation
(我从中获取了contentSizeObservation
的思想) .
这是我要复制的视图:
我假设它是 UICollectionView
。宽度和高度应该根据内容动态计算,这是我纠结的一点。
我创建了一个项目,其中 UICollectionView
的行为与我想要的不一样:https://github.com/Jasperav/CollectionViewDynamic/blob/master/UIKitTest/ViewController.swift。您可以直接 运行 项目然后自己查看问题。
每次添加新的Emoji
,都可以调用reloadData
方法,UICollectionView
的大小应该等于内容的大小但是有一个最大宽度。
这是添加 1 个表情符号时的样子(可怕):
真的很奇怪,单元格没有居中,我在控制台中出现布局错误。当添加 2 个表情符号时,我希望排成一行,但它们最终会排在彼此下面...
有足够的 space 单元格可以并排放置。
我究竟做错了什么?当我检查可视化调试器中的值时,我正确地计算了单元格的大小。我想我正在做很多手动工作来确保 UICollectionView
尺寸正确,但我没有做对。
我是不是把东西复杂化了?我想要的东西对我来说看起来很基本。不过,这是我第一次使用 UICollectionView
做一些事情。
这是addEmoji
方法的样子,整个代码可以在我上面提到的link中看到:
func addEmoji(emoji: Emoji) {
emojis.append(emoji)
var width: CGFloat = 0
for emoji in emojis {
width += emoji.size().width
}
let finalWidth = min(width, 280)
// Add some breath
widthAnchor_.constant = finalWidth + 5
reloadData()
heightAnchor_.constant = collectionViewLayout.collectionViewContentSize.height
}
我对你的代码做了一些小的改动,现在一切正常(改动用评论标记 // NEW
):
https://gist.github.com/sa1dai/b50bec10438b439a8c74cc6e8071bcf4?ts=4
关键思想不是在addEmoji
函数中更新heightAnchor_.constant
,而是使用contentSizeObservation
(我从contentSizeObservation
的思想) .