Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何用这样的图像/图标/视图偏移合成布局_Ios_Swift_Uicollectionview_Uiscrollview_Uicollectionviewcompositionallayout - Fatal编程技术网

Ios 如何用这样的图像/图标/视图偏移合成布局

Ios 如何用这样的图像/图标/视图偏移合成布局,ios,swift,uicollectionview,uiscrollview,uicollectionviewcompositionallayout,Ios,Swift,Uicollectionview,Uiscrollview,Uicollectionviewcompositionallayout,我正在尝试实现一个“标签云”效果,它应该看起来像这样- 每个标记项X都是一个单元格,#可以是图像、单元格或视图。它只需要知道这些是散列标签 我当前对标记云的尝试如下所示- 我无法确定如何偏移剖面项并在该空间中插入视图或任何类型 我尝试了一种破解或排序,每个单元格都包含图标和标签,然后在第一个单元格之后隐藏每个单元格上的图标。但是,这不起作用,因为标记项目3将包裹在图标下方,并且还存在一些重复使用问题 我怎样才能实现这个用户界面呢 我相信我可能需要渲染一个嵌套组,第一个组中有一个单元格,后面的

我正在尝试实现一个“标签云”效果,它应该看起来像这样-

每个
标记项X
都是一个单元格,
#
可以是图像、单元格或视图。它只需要知道这些是散列标签

我当前对标记云的尝试如下所示-

我无法确定如何偏移剖面项并在该空间中插入视图或任何类型

我尝试了一种破解或排序,每个单元格都包含图标和标签,然后在第一个单元格之后隐藏每个单元格上的图标。但是,这不起作用,因为
标记项目3
将包裹在图标下方,并且还存在一些重复使用问题

我怎样才能实现这个用户界面呢

我相信我可能需要渲染一个嵌套组,第一个组中有一个单元格,后面的组中有图标和mu标记?但是我不能让它工作


导入UIKit
最终类CustomCell:UICollectionViewCell{
let label=UILabel(帧:.0)
重写初始化(帧:CGRect){
super.init(frame:frame)
label.translatesAutoresizingMaskIntoConstraints=false
label.backgroundColor=.clear
label.font=.systemFont(ofSize:16)
label.textColor=.white
label.textAlignment=.center
label.sizeToFit()
contentView.addSubview(标签)
NSLayoutConstraint.activate([
label.topAnchor.constraint(等式:contentView.topAnchor,常量:8),
label.leadingAnchor.constraint(等式:contentView.leadingAnchor,常量:8),
label.bottomAnchor.constraint(等式:contentView.bottomAnchor,常量:-8),
label.trailingAnchor.constraint(等式:contentView.trailingAnchor,常量:-8)
])
}
必需初始化?(编码器:NSCoder){
归零
}
}
协议部分数据{
变量文本:字符串{get}
}
结构DummyData:SectionData{
让文本:字符串
}
枚举节类型:Int,caseitrable{
单格
双箱
行李传送带
案例标签
}
结构截面{
让id:Int
let类型:SectionType
标题:字符串?
让字幕:字符串?
let data:[SectionData]
}
类ViewController:UIViewController{
专用var项目:[部分]=[]{
didSet{collectionView.reloadData()}
}
私有(集合)惰性变量collectionView:UICollectionView={
让collectionView=UICollectionView(frame:view.frame,collectionViewLayout:makeLayout())
collectionView.autoresizingMask=[.flexibleHeight、.flexibleWidth]
collectionView.backgroundColor=.systemBackground
collectionView.dataSource=self
collectionView.register(CustomCell.self,forCellWithReuseIdentifier:“CustomCell”)
返回集合视图
}()
重写func viewDidLoad(){
super.viewDidLoad()
view.addSubview(collectionView)
项目=[
节(id:0,类型:.single,标题:nil,副标题:nil,数据:数组(0…3).map{DummyData中的索引(文本:“列表项\(索引)”))}),
节(id:1,类型:.carousel,标题:nil,副标题:nil,数据:数组(0…6).map{DummyData中的索引(文本:“carousel项\(索引)”)}),
节(id:2,类型:。标记,标题:nil,副标题:nil,数据:数组(0…15)。映射{DummyData中的索引(文本:“标记项\(索引)”)})
]
}
}
扩展视图控制器:UICollectionViewDataSource{
func numberOfSections(在collectionView:UICollectionView中)->Int{
返回项目。计数
}
func collectionView(collectionView:UICollectionView,numberOfItemsInSection:Int)->Int{
返回项目[节].data.count
}
func collectionView(collectionView:UICollectionView,cellForItemAt indexPath:indexPath)->UICollectionViewCell{
让model=items[indexPath.section].data[indexPath.item]
让cell=collectionView.dequeueReusableCell(带有reuseidentifier:“CustomCell”,for:indexath)作为!CustomCell
cell.label.text=model.text
cell.label.sizeToFit()单元格
cell.backgroundColor=indexPath.item%2==0?.darkGray:.浅灰色
返回单元
}
}
扩展视图控制器{
func makeLayout()->UICollectionViewLayout{
让layout=UICollectionViewCompositionalLayout{[weak self]索引,env in
guard let self=self-else{return nil}
let section=self.items[索引]
开关段类型{
case.single:return self.makeSingleSection()
case.carousel:return self.makeCarouselSection()
case.tags:return self.makeTagSection()
默认值:返回零
}
}
let config=UICollectionViewCompositionalLayoutConfiguration()
config.intersectionspace=20
layout.configuration=config
返回布局
}
func makeSingleSection()->NSCollectionLayoutSection{
让itemSize=NSCollectionLayoutSize(宽度维度:。分数宽度(1),高度维度:。分数高度(1))
let layoutItem=NSCollectionLayoutItem(layoutSize:itemSize)
let layoutGroupSize=NSCollectionLayoutSize(宽度维度:。分数宽度(1),高度维度:。估计(100))
let layoutGroup=NSCollectionLayoutGroup.horizontal(layoutSize:layoutGroupSize,子项:[layoutItem])
layoutGroup.interItemSpacing=.fixed(12)
let layoutSection=NSCollectionLayoutSection(组:layoutGroup)
layoutSection.contentInsets=.init(顶部:0,前导:16,底部:0,尾随:16)
layoutSection.interGroupSpacing=8
返回布局部分
}
func makeCarouselSection()->NSCollectionLayoutSection{
让itemSize=NSCollectionLayoutSize(宽度维度:。分数宽度(1),高度维度:。分数高度(1))
let layoutItem=NSCollectionLayoutItem(layoutSize:itemSize)
layoutItem.contentInsets=.init(顶部:0,前导:8,底部:0,尾随:8)
let layoutGroupSize=NSCollectionLayoutSize(宽度维度:。分数宽度(0.83),高度维度:。估计值(350))
let layoutGroup=NSCollectionLayoutGroup.horizontal(layoutSize:layoutGroupSize,子项:[layoutItem])
let layoutSection=NSCollectionLayoutSection(组:layoutG