Я знаю, что это может быть немного старым вопросом, теперь смотрящим на дату, но я совсем недавно столкнулся с той же проблемой. Вы можете наткнуться на множество предложений, таких как преобразование подпредставлений основного вида или его слоев. Это не сработало для меня.
На самом деле единственное решение, которое я нашел, состоит в том, что, поскольку вы хотите, чтобы элементы управления вашего пользовательского интерфейса были расположены динамически, не размещайте их в основном в конструкторе интерфейсов. Построитель интерфейса может быть полезен, зная нужные места для динамических элементов управления как в портретной, так и в альбомной ориентации. Т.е. создайте два отдельных тестовых представления в конструкторе интерфейсов, один портрет и другой ландшафт, выровняйте свои элементы управления по своему желанию и опустите данные X, Y, Width и Height только для использования с CGRectMake для каждого элемента управления.
Как только вы запишите все необходимые данные о позиционировании от разработчика интерфейса, избавьтесь от уже нарисованных ссылок на элементы управления и выходы / действия. Теперь они не будут нужны.
Конечно, не забудьте реализовать willRotateToInterfaceOrientation UIViewController для установки кадра элемента управления при каждом изменении ориентации.
@interface
//Declare your UI control as a property of class.
@property (strong, nonatomic) UITableView *myTable;
@end
@implementation
// Synthesise it
@synthesize myTable
- (void)viewDidLoad
{
[super viewDidLoad];
// Check to init for current orientation, don't use [UIDevice currentDevice].orientation
if (self.interfaceOrientation == UIInterfaceOrientationLandscapeLeft || self.interfaceOrientation == UIInterfaceOrientationLandscapeRight)
{
myTable = [[UITableView alloc] initWithFrame:CGRectMake(20, 20, 228, 312)];
}
else if (self.interfaceOrientation == UIInterfaceOrientationPortrait)
{
myTable = [[UITableView alloc] initWithFrame:CGRectMake(78, 801, 307, 183)];
}
}
myTable.delegate = self;
myTable.dataSource = self;
[self.view addSubview:myTable];
}
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration
{
if (toInterfaceOrientation == UIInterfaceOrientationLandscapeRight || toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft)
{
// Show landscape
myTable.frame = CGRectMake(20, 20, 228, 312);
}
else
{
// Show portrait
myTable.frame = CGRectMake(78, 801, 307, 183);
}
}