我是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;
答案 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了解更多详情。
或者您也可以直接删除控件。然后,当您想要显示它时,再次添加它。