【问题标题】:Swift UIStackView - Dynamic View Heights large spacing between cell programmaticallySwift UIStackView - 以编程方式动态视图高度单元格之间的大间距
【发布时间】:2017-09-10 14:35:23
【问题描述】:

我正在以编程方式使用 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 是因为我希望能够添加/删除元素并自行调整大小。

【问题讨论】:

    标签: swift uistackview


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-05-31
      • 1970-01-01
      • 2015-05-07
      • 2018-09-13
      • 1970-01-01
      • 2018-02-18
      • 2019-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多