Swift UIStackView - 动态视图高度以编程方式在单元格之间建立大间距

时间:2017-04-14 10:28:17

标签: swift uistackview

enter image description here

我正在以编程方式使用UIStackView,以在给定位置动态插入表单。按下一个按钮,UIView插入0个位置。当用户单击表单上的“保存”时,将擦除约束,删除单元格,然后替换为显示UIView。根据从表单内部记录的文本量,替换UIView可以具有可变高度。

我遇到的问题是当第一个单元格有长文本而第二个单元格输入了短文本时,这两个单元格不是齐平的。如果高度相同则不会发生这种情况。因此,如果第一个单元格的高度与第二个单元格相等,则所有三个单元格将在顶部显示为齐平。

上图显示了我的问题以及我希望实现的目标。我该如何解决这个问题?

此外,我看到以下关于我的约束的输出:

LayoutConstraints] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. 
Try this: 
    (1) look at each constraint and try to figure out which you don't expect; 
    (2) find the code that added the unwanted constraint or constraints and fix it. 
(
"<NSLayoutConstraint:0x61000028ac80 MyApp.StepView:0x7fdf4b74b360.height == 166   (active)>",
"<NSLayoutConstraint:0x6100002870d0 MyApp.StepView:0x7fdf4b678da0.height == 166   (active)>",
"<NSLayoutConstraint:0x61000028db10 'UISV-canvas-connection' UIStackView:0x7fdf4e8012d0.top == MyApp.StepView:0x7fdf4b74b360.top   (active)>",
"<NSLayoutConstraint:0x610000289d80 'UISV-canvas-connection' V:[MyApp.StepView:0x7fdf4b678da0]-(0)-|   (active, names: '|':UIStackView:0x7fdf4e8012d0 )>",
"<NSLayoutConstraint:0x61000028a820 'UISV-spacing' V:[MyApp.StepView:0x7fdf4b74b360]-(15)-[MyApp.StepView:0x7fdf4b678da0]   (active)>",
"<NSLayoutConstraint:0x61800009acc0 'UIView-Encapsulated-Layout-Height' UIStackView:0x7fdf4e8012d0.height == 770   (active)>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x6100002870d0 MyApp.StepView:0x7fdf4b678da0.height == 166   (active)>

这是一个非常自定义的设计,与典型的移动布局完全不同。我想知道如果放弃UIStackView并使用约束我是否会更好。我认为UIStackView因为我希望能够通过调整大小来添加/删除元素。

1 个答案:

答案 0 :(得分:0)

我找到了一种方法,通过测量stackview中的所有单元格来获得所需的结果。如果该值小于500,我将空白单元格推入堆栈顶部。这确保了所有其他细胞看起来对齐。

因为我基本上每次都在重建StackView,所以这种方法最有意义。