2013-06-24 1 views
4

Мне нужно скрыть элементы управления на странице с ограничениями и удалить пустое пространство, которое оставляет Hidden=true. Он должен быть похож на то, как веб обрабатывает видимость. Если он невидим, он не занимает места.Как скрыть UIView и удалить «пустое» пространство? -iOS/Monotouch

Кто-нибудь знает, как это сделать?

Пожалуйста, дайте мне знать, если вам нужна дополнительная информация. Thx


Пример:

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

Это должно действительно быть оказаны как это:

UIButton | UIButton | UIButton 
UIButton 

Edit: Я использую Xamarin Studio, и VS2012 для развития.

ответ

1

В раскадровке сначала прокладывайте свои ограничения. Тогда попробуйте это

self.viewToHideHeight.constant = 0; 
    self.lowerButtonHeightFromTop.constant = self.viewToHideHeightFromTop.constant + self.viewToHideHeight.constant; 

    [UIView animateWithDuration:0.5f animations:^{ 
     self.viewToHide.alpha = 0.0f; 
     [self.view layoutIfNeeded]; 
    }]; 
+0

К сожалению, я использую Xamarin (и VS2012 плагин) и не имеют доступа к раскадровке , Ограничения создаются вручную. У меня нет доступа к этим свойствам. –

0

Поскольку оригинальный вопрос связан с Xamarin, я предоставляю полное решение C#.

Во-первых, создать ограничение высоты для вашего зрения и дать ему идентификатор в Xcode Interface Builder:

Constraint Identifier

Затем в контроллер переопределения 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; 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^