我在UITableviewCell中有3个视图。第一个视图需要匹配父级(如在android中),其他两个视图需要在包装内容中。当我隐藏其中一个视图时,另外两个视图应占用该单元格。如果我隐藏了2个视图,则视图的其余部分占据了单元格。我们如何使用自动布局或任何其他概念来做到这一点。
第一个图像作为三个视图,当我隐藏第三个视图时,两个视图的其余部分调整它的单元格宽度。 我刚试过。
if(color==1){
view2.hidden=true;
view3.hidden=true;
}else if(color==2){
view3.hidden=true;
}
答案 0 :(得分:1)
UITableView()
使用重用标识符在整个生命周期中重用一个单个单元格(至少在某些情况下)。要在单元格内实现这种行为,您可以采用多种方法。最简单的一个如下。
使用UIStackView()。
在这种情况下,您可以使用UIStackView()
在单元格中附加所有UIView()
个对象。 UIStackView()
本身继承自UIView()
,但功能有限。牢固地用于管理视图的布局。以下是故事板中的ViewController屏幕截图,您可以关注它。
在UITableViewCell()
中设置视图记住 - 此处没有使用约束。
将所有这些视图附加到UIStackView()
中直到现在才使用限制:)。
最后,您可以向stackview添加约束而不是子视图(BTW取决于条件,您也可以更改uistackview的分布/填充属性,是的,您也可以设置约束。)。
现在我们完成了故事板设置。您可以在UITableviewCell()
子类中创建所有子视图的出口,并根据需要隐藏它们。隐藏休息后视图将相应调整大小。有关详细信息,您可以浏览以下代码段。
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if let cellOfTableView = tableView.dequeueReusableCell(withIdentifier: "cellIdentiferForOrderStatus", for: indexPath) as? OrderSuccessFailureDetailsTableViewCell{
cellOfTableView.view3.isHidden = true
//cellOfTableView.stackView.layoutIfNeeded() //You can call this if the layout has not properly managed.
}
}
N.B。 - 您也可以使用约束来实现相同的功能。您只需要为所有子视图提供约束并使用IBOutlet访问它们。当您隐藏任何一个子视图时,只需在动画块内相应地更新约束,以便平滑过渡。
以上代码在Swift 3.0 / Xcode 8.2.1中。
希望这会有所帮助。