在Xamarin.iOS中隐藏和显示控件

我是一名Xamarin.iOS初学者。 我也没有太多的iOS原生经验。 我试图隐藏并显示包含UILabel和UITextField的UIView。 虽然视图的hidden属性设置为true,但它仍占用屏幕中的空间。 如何删除此空间? 如果我尝试将宽度约束设置为0以隐藏它然后再将其设置回原始值以显示它,则它不起作用。 它继续保持在0。

另一个问题 – 视图在切换其可见性时是否会保持其状态和行为?

在此先感谢所有帮助..

没有您的代码,很难说出解决方案。 但从你的问题我可以看到几个解决方案,如:

  1. 您可以尝试在主线程中更改约束,在更改约束后,您需要调用LayoutIfNeeded()

    [Foundation.Export("layoutIfNeeded")] public virtual Void LayoutIfNeeded ()

  2. 除此之外,您可以使用horizontal UIStackView ,这将使UIView的宽度为0,同时隐藏并在显示时返回原始状态。

即使你将控件的Hidden设置为true,它仍然存在,就在那里看不到。 因此,如果您的第二个控件的约束取决于第一个,它将不会改变其位置。

将其设置回原始值以显示它,它不起作用。 它继续保持在0。

你使用哪种约束?

如果使用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; 

如果使用NSLayoutConstraint ,则可以直接更改常量:

 foreach (NSLayoutConstraint constraints in Control.Constraints) { if (constraints.FirstItem.IsEqual(Control) && constraints.FirstAttribute.Equals(NSLayoutAttribute.Width)) { constraints.Constant = 0; } } 
Interesting Posts