Вопрос по uidatepicker – Загрузка UIDatePicker в альбомной ориентации на UINavigationController

9

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

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

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

Ваш Ответ

6   ответов
13

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

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

Посетитьстраница интернета Больше подробностей. Спасибо, Стюарт!

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
0

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

1

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

_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];
}
0

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

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

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

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

0

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

Error: User Rate Limit Exceeded
0

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

Задаватьself.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin

Похожие вопросы