iOS:自动布局动态数量的项目

Posted

技术标签:

【中文标题】iOS:自动布局动态数量的项目【英文标题】:iOS: AutoLayout a dynamic number of items 【发布时间】:2018-01-16 09:09:01 【问题描述】:

我正在尝试重新创建如下所示的视图。对我来说困难在于其中一些元素会有不同数量的实例。

第一项是带有多行变量的 UILabel。总会有这一项。 UIImageView。这可以有零个或一项。 UIButton 零个或多个(至少最多 3-4 个)。

如何做到这一点?

实现这一目标的最佳做法是什么?我有一个使用 UITableView 的想法,只需将每个元素放在表格视图单元格中。但这感觉像是一个有点hacky的解决方案。特别是因为我必须删除表格的默认样式(边框和填充)。

另一种解决方案是使用只有一列的 UICollectionView。

第三种解决方案是建立在我拥有的自动布局解决方案的基础上,并通过大量 if 语句和 for 循环来实现它。这似乎是一个糟糕的解决方案。

那么我将如何实现这一点(使用最佳实践)?例如,将 UITableView 用于纯布局目的通常是不是一个坏主意?

【问题讨论】:

【参考方案1】:

创建一个 UIStackView 并在其中为每个具有零个或多个实例的项目创建另一个

当你想添加一个按钮到按钮 stackView 时添加使用这个

btnsStackView.addArrangedSubview(btn)

UILabels 和 UIImageViews 相同

检查一下它可能会有所帮助

   for i in 0...5
    
        let headerView:UIView = UIView(frame: CGRect(x: 0, y: 0, width: self.view.bounds.size.width, height: self.view.bounds.size.height))
       if(i % 2 == 0)
       
         headerView.backgroundColor = UIColor.blue
        
        else
       
          headerView.backgroundColor = UIColor.yellow
        

        self.stttq.addArrangedSubview(headerView)

    


    let headerView:UIView = UIView(frame: CGRect(x: 0, y: 0, width: self.view.bounds.size.width, height: self.view.bounds.size.height))

    headerView.backgroundColor = UIColor.black

    self.stttq.insertArrangedSubview(headerView , at:0)

【讨论】:

谢谢,忘了堆栈视图。现在会调查它。 :) 创建嵌套 StackView 而不仅仅是 func insertArrangedSubview(UIView, at: Int) 以在正确的位置插入元素是否有特殊原因? 不,但我更喜欢它,所以分配总是平等的

以上是关于iOS:自动布局动态数量的项目的主要内容,如果未能解决你的问题,请参考以下文章

iOS上传图片--根据图片的数量实现动态布局

iOS自动布局:如何动态均匀地排列项目?

动态数量的视图的自动布局

将 iOS 项目转换为自动布局

动态设置自动布局以在 iOS 中滚动视图

动态单元高度自动布局 IOS