我是xamarin ios和xcode
的新手。我有一个具有UILabel
,一个开关和一个水平UIStackView
的表格视图单元格(中心对齐,分布 - 等间距(。我创建了一个包含文本字段的默认UIView
。此默认视图将添加到 xib
中的UIStackView
中。在我的程序中,我想在现有视图的右侧添加一个类似的视图,并将其水平对齐。我还保留了添加的所有输入视图的列表。
我的问题是我无法隐藏新添加的视图。如果我删除宽度约束,则宽度因占位符文本而异。如果我删除前导锚点约束,则它们不会均匀对齐。
当我尝试为新添加的视图(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;
有关如何使用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;
您可以参考我的回答 这里 了解更多详情。
或者也可以直接删除控件。然后,当您要显示它时,请再次添加它。