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

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

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

如何做到这一点?

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

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

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

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

【问题讨论】:

    标签: ios uitableview uicollectionview autolayout


    【解决方案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) 以在正确的位置插入元素是否有特殊原因?
    • 不,但我更喜欢它,所以分配总是平等的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多