UIActivityIndicatorView Выровнено - PullRequest
3 голосов
/ 30 ноября 2011

У меня UIActivityIndicatorView по центру по горизонтали в XIB.

XIB

В iOS 4 (Simulator) индикатор по умолчанию имеет значение Large White (свойство цвета, представленное в iOS 5), что вполне нормально. Странная часть в том, что она также смещена.

iOS4

Мое первоначальное предположение было, что с XIB что-то не так (или что-то в этом роде). Однако в iOS 5 (Simulator, iPhone 4) он работает отлично.

iOS5

Видя, как единственное, что изменилось с iOS 4 на iOS 5 в отношении UIActivityIndicatorView s, это добавление свойства color, я в тупике. Я знаю, что, вероятно, здесь недостаточно информации для точного определения проблемы. Я больше обеспокоен тем, с чего начать отладку, и приветствую любые предложения относительно того, какую дополнительную информацию я мог бы предоставить.

Дополнительная информация:

  • iPad загружает индикатор в надежное положение, меняя цвета только между iOS 4 и iOS 5.
  • У меня есть две статические исходные точки (portPoint = (x, y); landPoint = (w, z);), которые я вручную устанавливаю при вращении. Когда приложение загружается, источник индикатора (правильно) portPoint (что я проверял через NSLog), несмотря на то, что визуально не выровнен. Когда я поворачиваюсь в альбомную ориентацию, источник правильно (визуально и в отношении данных) устанавливается на landPoint. Когда я поворачиваю назад, источник правильно (визуально и с точки зрения данных) устанавливает portPoint, тем самым решая проблему.

Ответы [ 3 ]

5 голосов
/ 16 декабря 2011

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

  1. Убедитесь, что autoResizingMask из UIActivityIndicatorView установлено на UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin

  2. Расположите индикатор активности в центре его суперпредставления, либо в файле XIB, либо в viewDidLoad

  3. Не меняйте рамку индикатора активности при вращении, он должен оставаться по центру автоматически

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

0 голосов
/ 16 декабря 2011

Идеи:

1 / Ваше представление (суперпредставление индикатора активности) больше вашего дисплея (маска плохого авторазмера? Плохие значения в xib plist?) Или имеет плохую позицию внутри суперпредставления.1004 * 2 / Маски автоматического изменения размера установлены неправильно.Для индикатора активности это должно быть

(UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin)

. Чтобы отладить это, попробуйте включить регистрацию в viewDidAppear.Получите центр (CGPoint) вашего индикатора активности и используйте методы UIView, чтобы преобразовать его в координаты вашего вида сверху (например, [UIView convertPoint:fromView:]).Эта позиция должна быть такой же, как та, которую вы видите на экране.

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

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

0 голосов
/ 10 декабря 2011

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

...