2016-08-03 56 views
0

我想用stackviews创建一个电子表格样式表。但是,正如您在图像中看到的那样,由于之前的项目更宽,列不会对齐。我如何确保他们对齐?嵌套的UIStackViews不对齐。我如何对齐它们?

enter image description here

这是我如何创建堆栈:

class MyTableFullScreenViewController: UIViewController { 

    var json: JSON? 

    @IBOutlet weak var scrollView: UIScrollView! 
    @IBOutlet weak var verticalStack: UIStackView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     for i in 0..<json!["Rows"].arrayValue.count{ 

      let horizontalStack = UIStackView() 
      horizontalStack.axis = .Horizontal 
      horizontalStack.spacing = 16 
      horizontalStack.distribution = .Fill 


      for j in 0..<json!["Rows"][i]["Column"].arrayValue.count{ 
       let innerJson = json!["Rows"][i]["Column"][j] 
       switch innerJson["InputType"].intValue{ 
       case 1: 
        Inputs.Input1(innerJson, parent: horizontalStack, isRepeatable: true) 
       case 11: 
        Inputs.Input11(innerJson, parent: horizontalStack, isRepeatable: true) 
       case 15: 
        Inputs.Input15(innerJson, parent: horizontalStack, isRepeatable: true) 
       default: 
        break 
       } 
      } 

      verticalStack.addArrangedSubview(horizontalStack) 

     } 

    } 


} 

这是故事板是如何做的: enter image description here

+0

你是否检查过这里的工作分配'.FillEqually'(或类似的东西)? – eMKa

+0

外部堆栈是.Fill,内部堆栈是.FillEqually。 –

+1

工作错误的工具。尝试使用自定义布局的集合视图。 – Avi

回答

0

您应该使用一个UICollectionView,而不是UIStackView这个.. 。将UIStackView看作AutoLayout的包装,简化了在预定义空间内对视图集合的布局而不是可滚动的容器,它能够处理几乎无限数量的视图的布局。

如果您要创建电子表格,您可能希望能够水平和垂直滚动,但只能根据您发布的示例代码进行垂直滚动(除非您'破解'UIStackView但是在那时你可能会使用UICollectionView)。

我推荐的是在每个单元格中创建一个包含水平滚动UICollectionView的UITableView。或者,根据您的需要,还可以将UICollectionView嵌套在垂直滚动的UICollectionView中。在其他UICollectionViews/UITableViews中包含UICollectionViews/UITableViews实际上是非常高性能的,并且经常在您描述的场景中使用。