2016-04-06 2 views
0

Использование Xamarin iOS для создания моего представления с кодом C# (без конструктора), как я могу создать различные ограничения для разных классов размера?Как использовать код для установки различных ограничений для автоматического макета с помощью Xamarin iOS

Пока что мне удалось создать ограничения только с использованием кода, и он отлично работает, но это тот же набор ограничений для всех размеров/ориентаций.

Этот код создает два пользовательских вида и устанавливает их, чтобы заполнить экран слева направо и найти их один под другим. Это отлично подходит для iPhone 6+ в портретном режиме, но в ландшафтном режиме я хочу, чтобы он скрывал второй вид (SomePanel) и растягивал первый вид (MainPanel) по всему экрану.

partial class SomeView : MvxViewController 
{ 
    CustomView MainPanel; 
    CustomView SomePanel; 

    public SomeView (IntPtr handle) : base (handle) 
    { 
    } 

    public override void ViewDidLoad() 
    { 
     base.ViewDidLoad(); 

     /// First Panel 
     MainPanel = CustomView.Create(); 
     View.AddSubview (MainPanel); 
     MainPanel.TranslatesAutoresizingMaskIntoConstraints = false; 


     /// Second Panel 
     SomePanel = CustomView.Create(); 
     View.AddSubview (SomePanel); 
     SomePanel.TranslatesAutoresizingMaskIntoConstraints = false; 



     /// <summary> 
     /// First set of constraints - two panels one under the other 
     /// </summary> 
     View.AddConstraint (NSLayoutConstraint.Create (MainPanel, NSLayoutAttribute.CenterX, NSLayoutRelation.Equal, View, NSLayoutAttribute.CenterX, 1f, 0f)); 
     View.AddConstraint (NSLayoutConstraint.Create (MainPanel, NSLayoutAttribute.Top, NSLayoutRelation.Equal, View, NSLayoutAttribute.Top, 1f, 50f)); 
     View.AddConstraint (NSLayoutConstraint.Create (MainPanel, NSLayoutAttribute.Height, NSLayoutRelation.Equal, 1f, 60f)); 
     View.AddConstraint (NSLayoutConstraint.Create (MainPanel, NSLayoutAttribute.Width, NSLayoutRelation.Equal, 1f, View.Bounds.Width - 40)); 

     View.AddConstraint (NSLayoutConstraint.Create (SomePanel, NSLayoutAttribute.CenterX, NSLayoutRelation.Equal, View, NSLayoutAttribute.CenterX, 1f, 0f)); 
     View.AddConstraint (NSLayoutConstraint.Create (SomePanel, NSLayoutAttribute.Top, NSLayoutRelation.Equal, MainPanel, NSLayoutAttribute.Bottom, 1f, 20f)); 
     View.AddConstraint (NSLayoutConstraint.Create (SomePanel, NSLayoutAttribute.Height, NSLayoutRelation.Equal, 1f, 60f)); 
     View.AddConstraint (NSLayoutConstraint.Create (SomePanel, NSLayoutAttribute.Width, NSLayoutRelation.Equal, 1f, View.Bounds.Width - 40)); 

    } 

} 

Я знаю, что это легко сделать с помощью конструктора, установить ограничения, изменить классы размера с помощью дизайнера и редактирования ограничений, опять-таки из конструктора.

Но в моем случае я хочу сделать это с помощью кода, и я не могу найти руководство или примеры того, как устанавливать различные ограничения для разных классов/разных ориентаций.

Любая помощь приветствуется.

+0

существует метод можно переопределить, что пожары, когда ориентация изменяется, там вы шо uld задайте свой вид. – PmanAce

ответ

1

Вы можете переопределить WillAnimateRotation для определения ориентации изменились, просто обновить View сдерживающих здесь

public override void WillAnimateRotation (UIInterfaceOrientation toInterfaceOrientation, double duration) 
{ 
    base.WillAnimateRotation (toInterfaceOrientation, duration); 
    //Update view constraints... 
} 

Другой вариант управляет всем видом на UpdateViewConstraints, как правило, это срабатывает, когда ViewController загружен, но мы могли бы стрелять снова каждый раз, когда ориентация изменяется, но обновление WillAnimateRotation

public override void WillAnimateRotation (UIInterfaceOrientation toInterfaceOrientation, double duration) 
    { 
     base.WillAnimateRotation (toInterfaceOrientation, duration); 
     View.SetNeedsUpdateConstraints(); 
    } 

    public override void UpdateViewConstraints() 
    { 
     base.UpdateViewConstraints(); 
     var currentOrientation = InterfaceOrientation; 
     //Update view constraints with current orientation 
    } 
1

Вы должны сделать это вручную, проверив ширину/высоту экрана/ориентацию и соответственно обновив свои ограничения.

iOS делает это для вас при использовании раскадровки.

Кстати, вы могли бы использовать масонский nuget или fluuglayout nuget для более простого способа добавления ограничений в код.

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