簡體   English   中英

當我以編程方式將其添加到UIstackview時,UIView不會隱藏

[英]UIView is not hiding when I add it programmatically to UIstackview

我是xamarin ios和xcode新手。 我有一個tableview單元格,其中具有UILabel ,開關和水平UIStackView (居中對齊,分布-等間距)。 我創建了一個包含文本字段的默認UIView 該默認視圖被添加到UIStackViewxib 在我的程序中,我想在現有視圖的右側添加一個類似的視圖,並將其水平對齊。 我還保留了所有添加的輸入視圖的列表。

我的問題是我無法隱藏新添加的視圖。 如果刪除寬度限制,則寬度將根據占位符文本而變化。 如果刪除前導錨約束,則它們不會統一對齊。

當我嘗試為新添加的視圖( UIStackView子視圖)設置hidden屬性時,它會將其隱藏,但空間保持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 您可以直接把newInputUIStackView 另外,由於使用了水平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;

您可以在這里參考我的答案以獲取更多詳細信息。

或者,您也可以直接刪除控件。 然后,當您想要顯示它時,再次添加它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM