Я работаю над приложением, которое идеально ориентировано на 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 4.3: смещено
Подобные вещи происходят с метками, для которых яустановить кадры с помощью [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 используется другая система отсчета, по крайней мере ...