在collectionView中有一个单元格格,如果单元格中的标签文本太长而无法显示,那么我已经截断了尾部。现在,当用户长点/按住单元格时,完整长度的文本将显示为UIMenu选项。但是,如果文本太长,它将再次被截断,并显示在UIContextMenu中。怎么解决这个问题?我在collectionView单元格中添加了上下文菜单显示的代码片段。
func collectionView(_ collectionView: UICollectionView, contextMenuConfigurationForItemAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration? {
if collectionView == headerCollectionView {
let headerText = headers[indexPath.row].label
return configureContextMenu(text: headerText)
}
else if collectionView == collectionView {
var data: [String] = []
dataOrganiser.getDataForSection(section: sections[indexPath.section], dataArray: &data)
return configureContextMenu(text: data[indexPath.item])
}
return configureContextMenu(text: "")
}
func configureContextMenu(text: String) -> UIContextMenuConfiguration {
let context = UIContextMenuConfiguration(identifier: nil, previewProvider: nil) { (action) -> UIMenu? in
let edit = UIAction(title: text, identifier: nil, discoverabilityTitle: nil, state: .off) { _ in }
return UIMenu(title: "", image: nil, identifier: nil, options: UIMenu.Options.destructive, children: [edit])
}
return context
}发布于 2022-06-06 19:09:01
我需要更多的信息来回答你的问题。可能还有一些代码。
但是,假设向单元格中添加了长按压手势,您可能希望调用一个更改单元格上的numberOfLines属性的函数。假设您使用的是UICollectionViewDiffableDataSource<Section, Item>,您需要更新item (您的单元格和item之间应该有一些通信),这样数据源就会看到item (它是可理解的)已经改变了。然后,它显示更改。
有些人采用另一种方法,他们只创建两个单元格,其中一个只显示一行,另一个将numberOfLines设置为零。然后,视图控制器(如果您遵循MVC,或者视图模型,如果您遵循MVVM),在这两个单元格之间切换。
https://stackoverflow.com/questions/72518373
复制相似问题