2009-07-06 1 views
9

У меня есть пользовательский UINavigationController, который поддерживает автоматическое вращение. У меня также есть UIDatePicker на одном из моих представлений, который я бросаю в стек навигационного контроллера. Автоматический поворот работает, если я запустил представление выбора даты в портрете и затем повернул его. Если я попытаюсь загрузить представление выбора даты в ландшафте, то сначала все испортится. Похоже, если бы он не поддерживал поворот, и в кадре было только около половины сборщика, видимого и от центра.Загрузка UIDatePicker в ландшафт на UINavigationController

Я попытался сделать свой собственный выбор даты, который поддерживает автоматическое вращение, если это была проблема, я попытался создать два разных вида и поменять их, и я попытался изменить размер кадра вида на Метод ViewWillAppear. На данный момент никто из них не работает для меня.

У кого-нибудь есть предложения по тому, как получить выбор даты, чтобы правильно отображаться в ландшафте на навигационном контроллере? Я, наверное, пропустил что-то простое, и ответ прямо передо мной, но я не нахожу его.

ответ

0

Ну, я исправил его. Мне удалось проверить, что такое ориентация, а затем удалить сборщик дат и код, я воссоздал сборщик дат и добавил его. Это сработало, это было некрасиво, но это сработало.

+1

Apparantly это не делает правильно, если устройство уже находится в альбомной ориентации, когда контроллер представления загружается из кончика пера. Поэтому ваше исправление для воссоздания элемента управления имеет смысл, но я нашел более хорошее исправление, см. Мой ответ. – progrmr

0

Добавить выбор даты для просмотра, который автоматически повернут (вид контроллера, а не прямо в окне).

Set self.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin

13

Я столкнулся с той же проблемой. Когда вы загружаете представление, хотя уже в Ландшафтной ориентации, UIPicker не отображается правильно. Я провел несколько часов, пытаясь найти обходной путь, пока не нашел исправление от this page from Llamagraphics. Вы добавляете этот код в viewDidLoad контроллера вида, который имеет сборщик:

for (UIView* subview in myPicker.subviews) { 
    subview.frame = myPicker.bounds; 
} 

Посетите webpage для более подробной информации. Спасибо Стюарту!

+0

Это отлично работает! – morais

+0

Спасибо! Я потратил часы, пытаясь решить эту проблему! – Nathan

+0

Блестящее и простое решение. Это было действительно безумие, спасибо! – MystikSpiral

0

Вот что сработало для меня. Когда я создаю DatePicker, я делаю это думаю, что в портретном режиме:

[[UIApplication sharedApplication] setStatusBarOrientation: UIInterfaceOrientationPortrait animated: NO]; 
datePicker = [[UIDatePicker alloc] initWithFrame: CGRectZero]; 
[[UIApplication sharedApplication] setStatusBarOrientation: curOrientation animated: NO]; 

Так в основном, изменить ориентацию, создать Datepicker и изменить ориентацию назад сразу же, каким он был раньше. Я установил ширину подборщика (ширина экрана) и высоту (216) в другом месте.

Я получил эту подсказку с другой страницы.

0

У меня была такая же проблема с отображением выбора даты (в режиме таймера), измененной горизонтально на iPad. Я не мог получить какое-либо из известных решений этой ошибки для работы, поэтому я исправил это с уродливым взломом, который включал в себя создание двух датпикеров в представлении - один из них изменен в фоновом режиме, а другой - в стандартном размере (320 пикселей) на переднем плане ... Я знаю, звучит больно, но он отображается правильно, и это важно. В любом случае это ошибка Apple;)

1

Приведенный ниже код будет работать как в портретном, так и в ландшафтном режимах. Для этого вам необходимо установить TableView кадр происхождения, как, что ниже: -

_dateTableViewCell=[self.tableView dequeueReusableCellWithIdentifier:@"DatePickerCell"]; 
if (self.dateTableViewCell==nil) 
{ 
    CGRect rect; 
    self.dateTableViewCell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"DatePickerCell"]; 
    UIDatePicker *datePicker=[[UIDatePicker alloc]initWithFrame:frame]; 
    datePicker.datePickerMode=UIDatePickerModeDateAndTime; 
    datePicker.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; 
    CGRect cellRect = self.dateTableViewCell.frame; 
    cellRect.size.height = 216; 
    self.dateTableViewCell.frame = cellRect; 
    CGRect startRect = self.dateTableViewCell.frame; 
    startRect.origin.x = 0.0; 
    datePicker.frame = startRect; 
    [self.dateTableViewCell.contentView addSubview:datePicker]; 
} 
Смежные вопросы