多行容器视图根据宽度布局子项

时间:2017-02-16 16:08:11

标签: ios objective-c custom-controls

基本上我试图为下面描述的自定义视图找到一个iOS库(首选Obj-C)。我无法找到类似的东西,但看起来这是非常常见的观点,所以也许社区中的任何人都可以把我指向正确的地方。

所以我试图在iOS中实现一个视图来复制图像中的行为:

enter image description here

基本上它是一个水平容器视图,它根据宽度堆叠其他视图(基本上是UILabels),并在需要时动态添加更多行。

因此,我目前的高级别方法是按以下方式实施:

  1. 将NSStrings列表传递到容器视图
  2. 容器视图将为每个字符串创建UILabel
  3. 然后计算每个标签的宽度和所有标签的总宽度
  4. 容器视图根据容器的宽度动态计算当前行的项目数。
  5. 其余项目进入下一行(容器高度增加),并且队列中有未处理的UILabel时重复步骤4。
  6. 虽然这个过程相当简单,但我仍在努力寻找简化开发的可行方法,并在此功能上节省客户的预算。

    那么也许有人可以指出更好的方法?看起来像UICollectionView可能是一个很好的选择,但仍然可能有任何类似于我上面描述的类似的库?

    无法在github上找到任何内容,但可能只是因为我搜索错误。

1 个答案:

答案 0 :(得分:1)

代码工作

    - (IBAction)actionTagCancel:(UIButton *)sender {
    [arrTagList removeObjectAtIndex:sender.tag];
    [self.collecTagCategory reloadData];

}


#pragma mark- collection data source

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{

    return arrTagList.count;
}

- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout sizeForItemAtIndexPath:(NSIndexPath *)indexPath {


    CGSize tagLabelSize = [arrTagList[indexPath.row] boundingRectWithSize: CGSizeMake(self.view.frame.size.width-75, 120)
                                                              options:NSStringDrawingUsesLineFragmentOrigin
                                                           attributes:@{NSFontAttributeName:[UIFont fontWithName:@"Helvetica Neue" size:14.0 ]}
                                                              context:nil].size;

    return CGSizeMake (tagLabelSize.width + 45, 30);
}

- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
    TagViewListCell *tagCell = [collectionView dequeueReusableCellWithReuseIdentifier:@"tagCell" forIndexPath:indexPath];
    tagCell.viewTag.layer.cornerRadius = 4;

    tagCell.btnTagCancel.tag = indexPath.row;

    tagCell.lblTagName.text = arrTagList[indexPath.row];
    _constTagViewHeight.constant = _collecTagCategory.contentSize.height;
    return tagCell;

}

<强>输出

enter image description here

删除标记后自动管理

enter image description here

  

修改

Get Repository of project from here