当我以编程方式将其添加到UIstackview

时间:2018-03-09 14:39:25

标签: c# ios xamarin.ios uistackview

我是xamarin ios和xcode的新手。我有一个tableview单元格,其UILabel,一个开关和一个水平UIStackView(中心对齐,分布 - 等间距)。我创建了一个包含文本字段的默认UIView。此默认视图已添加到UIStackView中的xib。在我的程序中,我想在现有视图的右侧添加一个类似的视图并将其水平对齐。我还保留了添加的所有输入视图的列表。

我的问题是我无法隐藏新添加的视图。如果我删除宽度约束,则宽度根据占位符文本而变化。如果我删除了前导锚点约束,那么它们就不会均匀对齐。

当我尝试为新添加的视图(UIStackView的子视图)设置隐藏属性时,它会隐藏它,但空格保持原样。我尝试将约束设置为false,将其与LayoutIfNeeded()一起使用,但这也无济于事。

可用于实际隐藏子视图的其他选项??

 UIView newView = new UIView();
 InputStack.AddArrangedSubview(newView);

 var newInput = new UITextField();
  newView.AddSubview(newInput);
  newInput.TranslatesAutoresizingMaskIntoConstraints = false;
  newInput.WidthAnchor.ConstraintEqualTo(175).Active = true;
  newInput.HeightAnchor.ConstraintEqualTo(35).Active = true;
  newInput.TopAnchor.ConstraintEqualTo(newView.TopAnchor).Active = true;
  newInput.LeadingAnchor.ConstraintEqualTo(InputList.Last().InputTextField.TrailingAnchor, 30).Active = true;

1 个答案:

答案 0 :(得分:0)

请参阅此documentation,了解如何使用UIStackView

如果您想从左到右添加项目,则无需先添加newView,然后将您的控件放入newView。您可以直接将newInput放入UIStackView。另外,因为您使用了水平StackView,其子视图将自动布局到尾部,所以可以省略顶部和前导约束。只需要宽度约束。

从您的代码中,您使用NSLayoutAnchor添加约束。您应该在修改之前禁用先前的约束:

//Define a field
NSLayoutConstraint WidthConstraint = null;

//When you want to modify the width, try to disable the previous one
if (WidthConstraint != null)
{
    WidthConstraint.Active = false;
}
WidthConstraint = Control.WidthAnchor.ConstraintEqualTo(0);
WidthConstraint.Active = true;

您可以参考我的回答here了解更多详情。

或者您也可以直接删除控件。然后,当您想要显示它时,再次添加它。