6

制約を使用するページでコントロールを非表示にし、空いたスペースを削除できるようにする必要がありますHidden=true。Web が可視性を処理する方法と似ている必要があります。見えない場合は、スペースを取りません。

これを達成するためのクリーンな方法を知っている人はいますか?

詳細が必要な場合はお知らせください。どうも


例:

UIButton | UIButton | UIButton
"empty space for hidden UIButton"
UIButton 

実際には次のようにレンダリングする必要があります。

UIButton | UIButton | UIButton
UIButton 

編集:開発には Xamarin Studio と VS2012 を使用しています。

4

2 に答える 2

3

元の質問は 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;
    }
}
于 2017-06-27T07:43:53.337 に答える