ios shareApplication rootviewcontroller.frame триггеры по оси Y
У меня есть приложение для iPad, где я перемещаю рамку приложения "вверх" каждый раз, когда отображается программная клавиатура.
[UIApplication sharedApplication].keyWindow.rootViewController.view.frame = CGRectMake(0, 150, 1024, 768);
Ключевым моментом является то, что на некоторых устройствах это идет правильным путем, а на других - в противоположном направлении, чем я хочу. Это не похоже на аппаратное или программное обеспечение. Я пробовал это на 4 iPad (два ipad1, два ipad3 и один ipad2) все с ios 5.1 (9B176). Есть ли способ узнать, произойдет ли это на устройстве, чтобы я мог бороться с этим с помощью логики?
Кроме того, кажется, что устройства, которые собираются делать это, делают это и остаются такими же (и наоборот). Как только это происходит, это всегда происходит или нет, независимо от обновления программного обеспечения, перезапуска устройства, удаления приложения или IPA vs run-from-xcode.
1 ответ
Вы устанавливаете рамку представления - но координаты рамки должны быть относительно суперпредставления представления (в данном случае keyWindow), а не самого себя. Поскольку окно никогда не поворачивается, координаты вашего кадра будут интерпретироваться по-разному, в зависимости от текущей ориентации устройства.
Вы можете сделать следующее, чтобы преобразовать координаты вашего кадра в те, которые подходят для keyWindow:
CGRect newFrame = [self.view convertRect:CGRectMake(0, 150, 1024, 768) toView:[UIApplication sharedApplication].keyWindow];
[UIApplication sharedApplication].keyWindow.rootViewController.view.frame = newFrame;