Проблемы автомакета UI Storyboard с ограничениями

очень простая (надеюсь) проблема с автомакетом, из-за которой я бьюсь головой о свой iMac.

у меня это в портрете

введите здесь описание изображения

И это то, что происходит в пейзаже.

введите здесь описание изображения

Все, что я хочу, это чтобы метки распространялись, как если бы вы не использовали автомакет. Какие ограничения добавить, чтобы распределить их равномерно?


person W Dyson    schedule 25.10.2012    source источник
comment
возможный дубликат Autolayout Even Spacing   -  person jrturton    schedule 26.10.2012
comment
Если вы не хотите или не нуждаетесь в автоматической компоновке, отключите ее — инспектор файлов в раскадровке, снимите флажок использовать автоматическую компоновку.   -  person jrturton    schedule 26.10.2012
comment
Могу ли я сделать это для одного контроллера представления в раскадровке? И я не хочу его отключать, я хочу научиться это исправлять.   -  person W Dyson    schedule 26.10.2012
comment
@jrturton, эта ссылка не помогла.   -  person W Dyson    schedule 26.10.2012
comment
Вы можете отключить его только для всего файла. Как объяснено в ссылке, даже такой интервал (IMO) может быть достигнут только путем размещения вашего представления в коде. Если бы у вас была переменная ширина кнопок (или все одинаковые ширины) и стандартное расстояние между ними, вы могли бы сделать это в раскадровке.   -  person jrturton    schedule 26.10.2012


Ответы (4)


Есть решение несколько проще, а также более гибкое, чем у @sust86:

  1. Добавьте пустые представления, которые служат пружинами между метками.
  2. Соедините все соседние виды с постоянными ограничениями расстояния.
  3. Соедините один из новых видов пружин со всеми другими видами пружин с одинаковыми ограничениями по ширине.
  4. Удалите все ненужные ограничения.

Для меня ограничения выглядят примерно так:

введите здесь описание изображения

Преимущество этой конфигурации в том, что вам не нужно фиксировать интервалы при изменении ширины ваших меток (кнопок в моем случае).

person ilmiacs    schedule 09.04.2013

Использовать новые ограничения в iOS 6 сложно. На веб-сайте Ray есть хорошее руководство из двух частей, посвященное автоматической компоновке в iOS 6. Хотя в ней объясняется, как закрепить держатели изображений в автоматической компоновке, принципы помогли мне понять всю автоматическую компоновку. Надеюсь, это поможет и вам. Вот ссылка: http://www.raywenderlich.com/20881/beginning-auto-layout-part-1-of-2 Адриан

person Adrian P    schedule 25.10.2012
comment
Это хороший учебник, но я не видел там ничего, что имело бы прямое отношение к вопросу. - person W Dyson; 26.10.2012

Попробуй это:

#define moneyLabelWidth 20
@property (nonatomic, strong) UILabel* moneyOneLabel;
@property (nonatomic, strong) UILabel* moneyTwoLabel;
@property (nonatomic, strong) UILabel* moneyThreeLabel;
@property (nonatomic, strong) UILabel* moneyFourLabel;
@property (nonatomic, strong) UILabel* moneyFiveLabel;
@property (nonatomic, strong) UILabel* moneySixLabel;
...
[self.view addSubview:moneyOneLabe];
[self.view addSubview:moneyTwoLabe];

moneyOneLabel.translatesAutoresizingMaskIntoConstraints = NO;
moneyTwoLabel.translatesAutoresizingMaskIntoConstraints = NO
etc
...


[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[_moneyOneLabel(moneyLabelWidth)]-[_moneyTwoLabel(moneyLabelWidth)]-[_moneyThreeLabel(moneyLabelWidth)]-[_moneyFourLabel(moneyLabelWidth)]-[_moneyFiveLabel(moneyLabelWidth)]-[_moneySixLabel(moneyLabelWidth)]-|"
                                                                  options:0
                                                                  metrics:@{@"moneyLabelWidth":@(moneyLabelWidth)}
                                                                    views:NSDictionaryOfVariableBindings(_moneyOneLabel, _moneyTwoLabel, _moneyThreeLabel, _moneyFourLabel, _moneyFiveLabel, moneySixLabel)]];
/*add vertical constraints*/

Вышеупомянутые ограниченияWithVisualFormat в основном говорят о том, что от левого края к правому краю горизонтально нарисуйте 6 меток денег, все шириной 20, с переменной шириной между ними. Я не запускал этот код, но думаю, что он будет работать (или, по крайней мере, близко к этому).

person Robert Wagstaff    schedule 24.01.2013

Самый простой способ — использовать 2 ограничения между каждым из представлений. Один с Больше или равно и один с Меньше или равно. Минимальный размер (больше или равно) должен соответствовать интервалу в портретном режиме. Максимальный размер (меньше или равно) должен быть интервалом в ландшафтном режиме.

Это то же самое решение, которое я предоставил на этот вопрос:

Использование автоматического макета для одинакового изменения пробелов при изменении размера< /а>

person sust86    schedule 25.01.2013