iOS:AutoLayout动态数量的项目

时间:2018-01-16 09:09:02

标签: ios uitableview uicollectionview autolayout

我试图重新创建下面显示的视图。对我来说困难的是,其中一些元素将具有不同数量的实例。

enter image description here

  • 第一项是具有变量多行的UILabel。这个项目永远都是其中之一。
  • 的UIImageView。这可以是零个或一个项目。
  • UIButton为零或更多(至少最多3-4)。

如何实现这个目标?

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

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

第三个解决方案是建立我自己的自动布局解决方案,并使用大量的if语句和for循环来实现它。这似乎是一个糟糕的解决方案。

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

1 个答案:

答案 0 :(得分: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)