gpt4 book ai didi

ios - 如何隐藏 UIView 并删除 "empty"空间? -iOS/Monotouch

转载 作者:可可西里 更新时间:2023-11-01 04:44:17 24 4
gpt4 key购买 nike

我需要能够在使用约束的页面上隐藏控件并移除 Hidden=true 留下的空白空间。它需要类似于网络处理可见性的方式。如果它是不可见的,则不会占用空间。

有谁知道一个干净的方法来完成这个?

如果您需要更多详细信息,请告诉我。谢谢


示例:

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

那真的应该像这样呈现:

UIButton | UIButton | UIButton
UIButton

编辑:我正在使用 Xamarin Studio 和 VS2012 进行开发。

最佳答案

由于原题与Xamarin相关,我提供完整的C#解决方案。

首先,为您的 View 创建高度约束并在 Xcode Interface Builder 中为其指定一个标识符:

Constraint Identifier

然后在 Controller 中覆盖 ViewDidAppear() 方法并使用 HidingViewHolder 包装 View :

    public override void ViewDidAppear(bool animated)
{
base.ViewDidAppear(animated);
applePaymentViewHolder = new HidingViewHolder(ApplePaymentFormView, "ApplePaymentFormViewHeightConstraint");
}

在布局 View 时创建 HidingViewHolder 很重要,因此它会分配实际高度。要隐藏或显示 View ,您可以使用相应的方法:

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;
}
}

关于ios - 如何隐藏 UIView 并删除 "empty"空间? -iOS/Monotouch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17285452/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com