Плавное масштабирование при добавлении / удалении подпредставлений в / из UIView - PullRequest
0 голосов
/ 20 января 2010

Я использую подкласс UIView, чтобы (программно) содержать и управлять многочисленными подпредставлениями (в основном, UIImageViews), которые должны быть расположены рядом друг с другом так, чтобы ни одно из них не перекрывалось. Можно с уверенностью предположить, что подпредставления имеют одинаковую высоту (при первоначальной прорисовке), но имеют различную ширину. Размер контейнера может быть изменен, и в этом случае я хочу, чтобы подпредставления масштабировались пропорционально. Более того, бывают случаи, когда мне нужно добавить / удалить / отредактировать любое данное подпредставление (которое может изменить его ширину).

У меня был некоторый успех в использовании:

[self setAutoresizesSubviews:YES];
[self setAutoresizingMask:(UIViewAutoresizingFlexibleLeftMargin  |
                               UIViewAutoresizingFlexibleWidth       |
                               UIViewAutoresizingFlexibleRightMargin |
                               UIViewAutoresizingFlexibleTopMargin   |
                               UIViewAutoresizingFlexibleHeight      |
                               UIViewAutoresizingFlexibleBottomMargin)];

чтобы контейнер автоматически изменял размеры своих подпредставлений при смене фрейма.

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

Я бы, конечно, был бы признателен, если бы кто-то мог объяснить, как sizeToFit, layoutSubviews, sizeThatFits :, setAutoresizesSubviews :, setAutoresizingMask: и setContentMode: должны использоваться в подобном случае. Я имею в виду, если я хочу настроить содержимое подпредставления (и расширить его), то как мне сделать это так:

  • расширение подпредставления (без растягивания или авторазмера чего-либо еще в нем)
  • контейнер расширен пропорционально количеству
  • Ни одно из других подпредставлений не затронуто

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 23 января 2010

В итоге я пошел по ручному маршруту, используя sizeThatFits: и layoutSubviews, чтобы явно контролировать, как все было перерисовано и организовано.Я обнаружил, что setAutoresizesSubviews: и setAutoresizingMask: помогали для простых макетов, но что было трудно отлаживать, если я попробовал что-то даже немного нетипичное.

Мой совет: в первый раз, когда вы экспериментируете с программными макетами, определите sizeThatFitsвсе ваши (под) представления и определить layoutSubviews для каждого.Используйте операторы отладки, чтобы записать размещение всего.Если вы довольны, подумайте о включении автоматического изменения размера в свой код (если это возможно).

0 голосов
/ 20 января 2010

Для анимации изменения размера представления выполните:

[UIView beginAnimations:@"resizeAnimation" context:nil];
youView.frame = newFrame;
[UIView commitAnimations];

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

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

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