UIStackView分布填充同样隐藏内部视图

问题描述 投票:0回答:1

我在表格单元格中堆叠视图,其中包含三个视图。我希望隐藏一个或两个视图时堆栈视图自行调整。我的问题完全如下面的问题所述,只是我的堆栈视图在表格单元格内。这些线程中提到的解决方案对我不起作用。请参阅下面的截图,了解确切的问题

堆栈视图固定到所有侧面,分布均匀填充。

我们如何让它发挥作用?

UIStackView shift content to left when inner views are hidden

UIStackView Distribution Fill Equally

enter image description here

Constraints Storyboard func tableView(_ tableView:UITableView,cellForRowAt indexPath:IndexPath) - > UITableViewCell {

    guard let cell = tableView.dequeueReusableCell(withIdentifier: "tableCellID", for: indexPath) as? TableViewCell else {
        fatalError("Can't find cell")
    }

    let profile = array[indexPath.row]

    if profile.status {
        cell.view2.isHidden = false
    } else {
        cell.stackViewTrailing.constant += cell.view2.frame.size.width
        cell.view2.isHidden = true
    }

    return cell
}
ios swift uitableview uistackview
1个回答
0
投票

您的问题是,您总是在尾随常量(cell.view2.frame.size.width)中添加一些值,并且永远不会再次减去它(在您发布的代码中)。表格视图单元正在重复使用/回收。因此,当您滚动并且滚动出视图并且仅有2个已排列的子视图的旧表视图单元格正在重新生成但这次有3个排列的子视图时,它仍然具有您为stackViewTrailing约束设置的额外常量。

尝试为约束的常量设置绝对值,而不是使用+=运算符为其添加值,即

cell.stackViewTrailing.constant += cell.view2.frame.size.width

做这个:

cell.stackViewTrailing.constant = cell.view2.frame.size.width + padding

那应该可以解决问题。 (也就是说,如果我正确理解你的问题。)

Note:

如果堆栈视图在这里是正确的选择,您可能会重新考虑。当其中一个被隐藏(或显示)时,堆栈视图总是调整其排列的子视图的宽度,以便剩余的可见空间占用所有可用空间。如果你想拥有3个固定列,无论它们有多少是可见的,最好只使用普通约束并给所有三个子视图等宽度约束。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.