Возможно ли иметь XIB, затем установить размер и масштабировать все, чтобы поместиться в UIView? - PullRequest
2 голосов
/ 28 октября 2011

Я новичок в разработке для iOS и не уверен, что то, что я хочу сделать, возможно.По сути, я получаю некоторые продукты через веб-сервис и хочу отображать каждый из них на экране, по 4 квадрата в строке.Каждый из этих квадратов (с изображением и названием продукта) представляет собой UIView, который имеет файлы .h, .m и xib.Я создаю каждый вид следующим образом:

CategoryItemView *catItem = [[[NSBundle mainBundle] loadNibNamed:@"CategoryItemView" owner:self options:nil] objectAtIndex:0];
[categoryItems addObject:catItem];

и позиционирую его как:

while (colCount < cols && items < [categoryItems count]) {
  CGRect  viewRect = CGRectMake( x * colCount + pad , (row * (x-pad)) + pad*row + pad, x - pad, x - pad );
  CategoryItemView* myView = [categoryItems objectAtIndex:items];
  myView.frame = viewRect;
  [self.view addSubview:myView];

  colCount++;
  items++;
 }

Я хочу использовать xib, чтобы я мог расположить все элементы.Однако я не могу найти способ разложить xib так, чтобы при таком позиционировании UIView все элементы масштабировались так, чтобы соответствовать и сохранять свои относительные позиции в UIView.Возможно ли это?

Обновление: Вы можете посмотреть пример с двумя классами, который не работает http://home.glasscubes.com/share/s/d57sb19

спасибо

1 Ответ

2 голосов
/ 28 октября 2011

autoresizingMask - это свойство, которое вы ищете для этих представлений.

Из документов:

autoresizingMask

Целочисленная битовая маска, определяющая, как получательизменяет размеры при изменении границ своего суперпредставления.

@ property (nonatomic) UIViewAutoresizing autoresizingMask

Обсуждение

При изменении границ представления это представление автоматически изменяет размеры своих подпредставлений в соответствии с каждым подпредставлениемавторазмерная маска.Вы определяете значение этой маски, комбинируя константы, описанные в UIViewAutoresizing, используя оператор C побитового ИЛИ.Комбинируя эти константы, вы можете указать, какие размеры представления должны увеличиваться или уменьшаться относительно суперпредставления.Значением по умолчанию для этого свойства является UIViewAutoresizingNone, которое указывает, что размер представления не должен изменяться вообще.

Если задано более одного параметра вдоль одной оси, поведение по умолчанию заключается в пропорциональном распределении разницы в размерах междугибкие части.Чем больше гибкая часть относительно других гибких частей, тем больше вероятность ее роста.Например, предположим, что это свойство включает в себя константы UIViewAutoresizingF FlexibleWidth и UIViewAutoresizingF FlexibleRightMargin, но не включает в себя константу UIViewAutoresizingFurableLeftMargin, что указывает на то, что ширина левого поля представления фиксирована, но ширина и правое поле вида могут изменяться.Таким образом, вид отображается привязанным к левой стороне своего суперпредставления, в то время как ширина вида и промежуток справа от вида увеличиваются.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...