在ios中隐藏UIStackview中的子视图

时间:2017-01-16 23:48:10

标签: ios swift swift3 uistackview

为了隐藏UIStackView中的子视图,最好将isHidden设置为true还是使用removeArrangedSubview并从父Stackview中删除子视图?

我正在使用Stackview在tableView单元格中排列我的UIElements。 我目前有一个父StackView和一个childStackview安排在里面。需要根据条件显示或隐藏子视图。当条件变为true时,我将子视图的isHidden属性设置为true。

当我滚动并且新细胞变得可见时  我在控制台中收到以下消息。该应用程序不会崩溃。

  

NSLayoutConstraint:0x600000093470'UISV-canvas-connection'UIStackView:0x7fd4527201b0.top == UILabel:0x7fd452720370'Day Off - Rest and Sleep ...'。top(active)

在UIViewAlertForUnsatisfiableConstraints处创建一个符号断点,以便在调试器中捕获它。 <UIKit/UIView.h>中列出的UIView上的UIConstraintBasedLayoutDebugging类别中的方法也可能有所帮助。  [LayoutConstraints]无法同时满足约束。     可能至少以下列表中的一个约束是您不想要的约束     试试这个:

  1. 查看每个约束并尝试找出您不期望的内容;
  2. 找到添加了不需要的约束或约束的代码并修复它。 ( “” “” “” “” “” “” “” )
  3. 将尝试通过违反约束来恢复

2 个答案:

答案 0 :(得分:13)

要回答您的第一个问题,如果您不需要取消隐藏子视图,最合乎逻辑的做法是使用removeArrangedSubview(UIView)将其删除。您可能知道,只要添加,删除,插入或隐藏/取消隐藏视图,堆栈视图就会自动更新其布局。

您在控制台中收到的有关约束的警告可能与您现在为子视图实施的任何内容相关,也可能与之无关。你有没有提到它,因为你认为它可能是相关的?

希望有所帮助。

答案 1 :(得分:-1)

试试这个UIStackView Subclass

stackView.setViews([view1, view2], gone: true, animated: true)