2015-09-30 2 views
0

Я создаю пользовательский uicontrol для IOS (xamarin.iOS). Uicontrol состоит из текстового поля и кнопки. Я создание пользовательского элемента управления путем расширения UIViewАвтоматические ограничения компоновки для динамического представления

Coplexity

Ширин текстового поля будет дан пользователем и должен быть отображено во время выполнения.

Сценарий: пользователю будет предоставлена ​​форма в приложении, где они могут ввести ширину элемента управления, например, если пользователь ввел 50 и нажал кнопку отправки, когда пользовательский интерфейс UIcontrol отображается на следующей странице, он должен занимает всего 50% от общей ширины экрана.

Выпуск

Мне нужно применять ограничение Автокомпоновки для текстового поля. и я добавил ограничения, только верхние и левые ограничения работают, как ожидалось. Когда я повернуть устройство правое поле не меняется пропорционально

this.AddConstraint (
       NSLayoutConstraint.Create(textField,NSLayoutAttribute.Left,NSLayoutRelation.Equal,this, NSLayoutAttribute.Left, 1 , 10) 
     ); 

     this.AddConstraint (
      NSLayoutConstraint.Create(textField,NSLayoutAttribute.Right,NSLayoutRelation.Equal,this, NSLayoutAttribute.Left, 1 , ((UIScreen.MainScreen.Bounds.Width * editTextWidth)/100)+10) 
     ); 

     this.AddConstraint (
      NSLayoutConstraint.Create(textField, NSLayoutAttribute.Top, NSLayoutRelation.Equal,label, NSLayoutAttribute.Top, 1, 30+10) 
     ); 

     this.AddConstraint (
      NSLayoutConstraint.Create(textField, NSLayoutAttribute.Height, NSLayoutRelation.Equal, null, NSLayoutAttribute.NoAttribute, 0, 3 * 10) 
     ); 

ответ

1

Я не знаю, как вы это делаете в Xamarin, но я мог бы объяснить, как это можно сделать.

Я предполагаю, что ваши начальные координаты x и y остаются прежними.

два ограничения, то вы могли бы добавить к началу являются:

NSLayoutConstraint.Create(textField,NSLayoutAttribute.Left,NSLayoutRelation.Equal,this, NSLayoutAttribute.Left, 1 , 10) 

NSLayoutConstraint.Create(textField, NSLayoutAttribute.Top, NSLayoutRelation.Equal,label, NSLayoutAttribute.Top, 1, 30+10) 

Два других ограничений следует добавить, являются постоянной высоты и ширины ограничения текстового поля.

И когда вид нагрузки, просто изменить константу из тех же ограничений в массиве, который вы могли бы просто получить, делая это:

constraintsArray = textfield.constraints; 

Это набор ваших constaints изначально.

Теперь настроить ваш взгляд, чтобы слушать для изменения ориентации устройства и снова обновить константы:

NSNotificationCenter.DefaultCenter 
       .AddObserver("UIDeviceOrientationDidChangeNotification", DeviceRotated); 

    private void DeviceRotated(NSNotification notification){ 
     switch (UIDevice.CurrentDevice.Orientation){ 
     case UIDeviceOrientation.Portrait: 
      constraint.constant = ((UIScreen.MainScreen.Bounds.Width * editTextWidth)/100); 
      break; 
     case UIDeviceOrientation.LandscapeLeft: 
     case UIDeviceOrientation.LandscapeRight: 
      constraint.constant = ((UIScreen.MainScreen.Bounds.Height * editTextWidth)/100); 
     } 
    } 
Смежные вопросы