TableviewCell View在ios中的换行内容

时间:2017-03-24 07:08:28

标签: ios objective-c

我在UITableviewCell中有3个视图。第一个视图需要匹配父级(如在android中),其他两个视图需要在包装内容中。当我隐藏其中一个视图时,另外两个视图应占用该单元格。如果我隐藏了2个视图,则视图的其余部分占据了单元格。我们如何使用自动布局或任何其他概念来做到这一点。

enter image description here

enter image description here

第一个图像作为三个视图,当我隐藏第三个视图时,两个视图的其余部分调整它的单元格宽度。              我刚试过。

if(color==1){
    view2.hidden=true;
    view3.hidden=true;
}else if(color==2){
     view3.hidden=true;
}

1 个答案:

答案 0 :(得分:1)

iOS中的

UITableView()使用重用标识符在整个生命周期中重用一个单个单元格(至少在某些情况下)。要在单元格内实现这种行为,您可以采用多种方法。最简单的一个如下。

使用UIStackView()。

在这种情况下,您可以使用UIStackView()在单元格中附加所有UIView()个对象。 UIStackView()本身继承自UIView(),但功能有限。牢固地用于管理视图的布局。以下是故事板中的ViewController屏幕截图,您可以关注它。

在UITableViewCell()

中设置视图

enter image description here

记住 - 此处没有使用约束。

将所有这些视图附加到UIStackView()

enter image description here

直到现在才使用限制:)。

向UIStackView()添加约束 enter image description here

最后,您可以向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中。

希望这会有所帮助。