元の質問は Xamarin に関連しているため、完全な C# ソリューションを提供します。
まず、ビューの高さの制約を作成し、Xcode Interface Builder で識別子を指定します。
次に、コントローラで ViewDidAppear() メソッドをオーバーライドし、ビューを HidingViewHolder でラップします。
public override void ViewDidAppear(bool animated)
{
base.ViewDidAppear(animated);
applePaymentViewHolder = new HidingViewHolder(ApplePaymentFormView, "ApplePaymentFormViewHeightConstraint");
}
ビューがレイアウトされたときに HidingViewHolder を作成することが重要であるため、実際の高さが割り当てられます。ビューを非表示または表示するには、対応するメソッドを使用できます。
applePaymentViewHolder.HideView();
applePaymentViewHolder.ShowView();
HidingViewHolder ソース:
using System;
using System.Linq;
using UIKit;
/// <summary>
/// Helps to hide UIView and remove blank space occupied by invisible view
/// </summary>
public class HidingViewHolder
{
private readonly UIView view;
private readonly NSLayoutConstraint heightConstraint;
private nfloat viewHeight;
public HidingViewHolder(UIView view, string heightConstraintId)
{
this.view = view;
this.heightConstraint = view
.GetConstraintsAffectingLayout(UILayoutConstraintAxis.Vertical)
.SingleOrDefault(x => heightConstraintId == x.GetIdentifier());
this.viewHeight = heightConstraint != null ? heightConstraint.Constant : 0;
}
public void ShowView()
{
if (!view.Hidden)
{
return;
}
if (heightConstraint != null)
{
heightConstraint.Active = true;
heightConstraint.Constant = viewHeight;
}
view.Hidden = false;
}
public void HideView()
{
if (view.Hidden)
{
return;
}
if (heightConstraint != null)
{
viewHeight = heightConstraint.Constant;
heightConstraint.Active = true;
heightConstraint.Constant = 0;
}
view.Hidden = true;
}
}