Приложение iOS полностью смещается при переключении с 5 на 4.3 в симуляторе - PullRequest
5 голосов
/ 15 ноября 2011

Я работаю над приложением, которое идеально ориентировано на iOS 3.2.Тем не менее, я разрабатываю его на Lion и с последними 5 SDK.Насколько я знаю, я не использую какие-либо особенности SDK 5.Но:

на любых устройствах с iOS 5 или симулятором (установлен на v.5), приложение работает просто отлично.на любых устройствах с iOS 4.3 или ниже (и то же самое относится и к симулятору, настроенному на v. 4.3), некоторые вещи, связанные с рамками вида, смещаются.

Например, вот 2 примера:

Индикатор активности внутри представления предупреждений.Вот код:

NSURLConnection *urlConnection = [[NSURLConnection alloc] initWithRequest:fileRequest delegate:self];
  if(urlConnection) 
  {
    uistatusDialog = [[UIAlertView alloc] initWithTitle:(description ? NSLocalizedString(description, nil) : NSLocalizedString(@"Downloading", nil))
                                                message:nil
                                               delegate:nil 
                                      cancelButtonTitle:nil
                                      otherButtonTitles:nil];

    UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
    indicator.autoresizingMask = (UIViewAutoresizingFlexibleLeftMargin  | 
                                  UIViewAutoresizingFlexibleRightMargin | 
                                  UIViewAutoresizingFlexibleTopMargin   | 
                                  UIViewAutoresizingFlexibleBottomMargin);

    [indicator startAnimating];
    [uistatusDialog addSubview: indicator];
    [uistatusDialog show];
    [indicator release];

А вот скриншоты для обоих симуляторов: iOS 5: правильно iOS 5: correct iOS 4.3: смещено iOS 4.3: misaligned

Подобные вещи происходят с метками, для которых яустановить кадры с помощью [UILabel alloc] initWithFrame: CGRectMake (...].

Этот код, например:

UITableViewCell * cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
                                                   reuseIdentifier:reuseIndentifier] autorelease];

  cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
  cell.selectionStyle = UITableViewCellSelectionStyleGray;

  UILabel* mainLabel = [[[UILabel alloc] initWithFrame:CGRectMake(70, 0, 0, 20)] autorelease];
  mainLabel.font = [UIFont boldSystemFontOfSize:(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad ? 18 : 12)];
  mainLabel.textAlignment = UITextAlignmentLeft;
  mainLabel.textColor = [UIColor blackColor];
  mainLabel.backgroundColor = [UIColor clearColor];
  mainLabel.autoresizingMask = (UIViewAutoresizingFlexibleHeight | 
                                UIViewAutoresizingFlexibleWidth  | 
                                UIViewAutoresizingFlexibleRightMargin);
  //mainLabel.adjustsFontSizeToFitWidth = YES;
  mainLabel.tag = MAINLABEL_TAG;

Прекрасно выравнивается в iOS5, как для симуляторов, так и для устройств.Но в 4.3 это не так. Я могу только думать, что локальная система координат изменилась с одного SDK на следующий?

Любая помощь очень ценится!

РЕДАКТИРОВАТЬ: Просто снять егона данный момент я в итоге заменил все экземпляры CGRectMake(x,y,w,h) на что-то вроде (предполагая, что x, y, w, h - это те, которые я бы использовал для CGRectMake):

CGrect refFrame = superview.frame;
refFrame.origin.x += x;
refFrame.origin.y += y;
refFrame.size.w = w;
refFrame.size.h = h;
theObjInQuestion.frame = refFrame;

ИтакПо сути, похоже, что между SDK 5 и 4.3 используется другая система отсчета, по крайней мере ...

Ответы [ 2 ]

2 голосов
/ 15 ноября 2011

У меня была похожая проблема с одним UIImageView в нашем приложении, который был смещен вниз примерно на 100 пунктов на экране, похоже, смещен другим контентом, который должен был плавать поверх UIImageView (хотя это могло быть совпадением).

«Решение», которое я нашел в нашем случае, состояло в том, чтобы отключить автоматическое изменение размера для атрибута верхнего позиционирования для UIImageView в IB, щелкнув по красному значку I на экране автоматического определения размера в Инспекторе размеров в Интерфейсном Разработчике. Я называю это «решением», а не решением, потому что мне остается неясным, почему это вообще было проблемой, и почему это произошло только для этого единственного представления и только в iOS 5.

Я также обнаружил, что изменение положения этого вида вверх или вниз предотвращает его смещение. Проблема возникла только тогда, когда она была выровнена по верхнему краю родительского представления.

Я пришел к выводу, что это, скорее всего, ошибка в iOS 5, а не новое намерение или более строгое поведение, но я не уверен.

0 голосов
/ 15 ноября 2011

Между 4 и 5 есть некоторые существенные различия, хотя я только начал выяснять их. Что-то изменилось в системах координат, но именно то, чего я не знаю.

Я подозреваю, что лучше / безопаснее всего иметь два совершенно разных пути для расчета макета, пока кто-нибудь не сможет понять все "ошибки". Таким образом, две версии могут быть «настроены» отдельно.

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