У меня есть представление с tableView и mapView. В портретном режиме я хочу, чтобы mapView занимал верхние 60% экрана, а представление таблицы - нижние 40%. В альбомной ориентации я хочу, чтобы mapView занимал 45% экрана справа, а tableView - 55% слева.
Таким образом, я подумал, что нечто подобное должно сработать:
-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
UIScreen* mainscr = [UIScreen mainScreen];
CGSize screenSize = mainscr.currentMode.size;
if(self.interfaceOrientation == UIInterfaceOrientationLandscapeLeft
|| self.interfaceOrientation == UIInterfaceOrientationLandscapeRight)
{
tableview.frame = CGRectMake(0, 0 , (screenSize.height*.55), screenSize.width);
mapView.frame = CGRectMake((screenSize.height*.55), 0, (screenSize.height*.45), screenSize.width);
}
else
{
tableview.frame = CGRectMake(0, (screenSize.height*.6) ,screenSize.width, (screenSize.height*.4));
mapView.frame = CGRectMake(0, 0,screenSize.width, (screenSize.height*.6));
}
}
Этот код отлично работает на симуляторе iphone с версией 4 ОС, но когда я пытаюсь запустить его на симуляторе iphone 4 или на симуляторе ipad, изображения полностью отключаются (я могу видеть только около четверти карта в портретной и нет таблицы, а в альбомной я могу видеть только таблицу).
Я не понимаю, почему это так - поскольку я просто масштабирую представления, чтобы соответствовать размеру экрана, разве что-то вроде приведенного выше кода не будет работать нормально, независимо от разрешения устройства? Мне удалось исправить ситуацию путем масштабирования с использованием различных значений для iphone, iphone 4 и ipad, но использованные мною числа были обнаружены методом проб и ошибок, и, похоже, они не имеют особого смысла.
Может кто-нибудь указать мне правильный способ передачи этих изменений ориентации для всех устройств? Большое спасибо!