iOS9: UIDatePicker с datePickerMode из UIDatePickerModeTime показывает только часы, а не минуты

Я использую Xcode beta 7 с симулятором iOS9. Использование UIDatePicker с datePickerMode UIDatePickerModeTime показывает только часы, а не минуты.

Смотрите скриншот:

введите здесь описание изображения

Очевидно, что на iOS 7 и 8 он работает как положено и показывает как часы, так и минуты. Снимок экрана:

введите здесь описание изображения

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

спасибо, Алекс


person FranticRock    schedule 29.07.2015    source источник
comment
Есть ли ответ от Apple? Я все еще вижу эту проблему в бета-версии 5. Знаете ли вы (возможно, из созданного вами тикета), сможем ли мы ожидать решения до выхода iOS 9.0? Конечно, было бы неплохо позволить нашим командам QA протестировать наши сборки/совместимость с iOS 9 до того, как это станет известно публике.   -  person u2Fan    schedule 24.08.2015
comment
stackoverflow.com/a/32751985/6034101 у меня работает с этой проблемой. Спасибо.   -  person Ashwini    schedule 08.03.2016


Ответы (6)


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

UIPickerView и UIDatePicker теперь могут изменять размер и быть адаптивными — раньше эти представления применяли размер по умолчанию, даже если вы пытались изменить их размер. Эти представления также теперь по умолчанию имеют ширину 320 точек на всех устройствах, а не ширину устройства на iPhone. Интерфейсы, которые полагаются на старое применение размера по умолчанию, скорее всего, будут выглядеть неправильно при компиляции для iOS 9. Любые возникающие проблемы можно решить путем полного ограничения или изменения размера представлений средства выбора до желаемого размера вместо того, чтобы полагаться на неявное поведение.

Примечания к выпуску iOS 9

В моем случае все, что мне нужно было сделать, это удалить все ограничения на UIDatePicker, а затем «Сбросить до предлагаемых ограничений». Восстановите и теперь все хорошо.

person Andrew Little    schedule 14.10.2015
comment
Сброс до предложенного мне не помог (DatePicker находится внутри TableViewCell). Я сделал Равную ширину для суперпросмотра, фиксированную высоту, ведущее пространство и верхнее пространство для суперпросмотра и стрелы - все выглядело хорошо. - person nickdnk; 05.11.2015
comment
Это решение, которое сработало для меня. Добавлены ограничения Leading, Trailing, Top, Bottom в моем файле Nib, и это работает. - person FranticRock; 28.11.2015

Я столкнулся с этим после публичного выпуска iOS 9.0 с UIDatePicker, использующим UIDatePickerModeDate в моем табличном представлении.

Я взломал его, изменив режим UIDatePicker прямо перед его отображением, а затем вернув его обратно на желаемый:

[myDatePicker setDatePickerMode:UIDatePickerModeDateAndTime];
[myDatePicker setDatePickerMode:UIDatePickerModeDate];

Я предполагаю, что перерисовка решает проблему. Ради интереса я не думаю, что на самом деле это проблема не отображения минут, а скорее ошибка в подвидах, потому что вот как выглядело мое:

UIDatePicker с белым блокирующим пространством.

При проверке с помощью FLEX это часть UIDatePicker со сплошным белым фоном.

Ошибка UIDatePicker в подпредставлениях.

person LordParsley    schedule 18.09.2015
comment
Это работает, странно, спасибо за обнародование, действительно тревожная ошибка. - person BootMaker; 20.09.2015
comment
Это единственное решение в этой теме, которое сработало для меня. Добавлено в viewDidLoad(). Спасибо! - person Alex Pretzlav; 02.12.2015

У меня возникла проблема при обновлении Xcode до 7.0.

Когда отображался UIDatePicker, средняя часть была пустой, согласно ответу LordParsley.

Высота UIDatePicker для iOS 9 — 216; тогда как в более ранних версиях высота составляла 162, и принудительное увеличение высоты до 162 решило проблему.

Поскольку мое представление определено в раскадровке, я устанавливаю ограничение по высоте для UIDatePicker и устанавливаю высоту 162 для версий iOS ‹ 9.0 в viewDidLoad представления.

- (void) viewDidLoad {
    [super viewDidLoad];

    if ([[[UIDevice currentDevice] systemVersion] floatValue] < 9.0) {
        //
        // NOTE: iOS 9, or Xcode 7, now sets UIDatePicker height at 216; whereas,
        // iOS 8, or Xcode 6.x, set it at 162.
        //
        // If the height is left at 216, then on iOS 7.1, the middle portion of the
        // UIDatePicker control is missing.  Setting the hieght to 162 fixes the issue
        // within this application.
        //
        // UIDatePicker frame cannot be used to adjust the size, therefore use a
        // height contraint to change the size.
        //
        self.dateHeightConstraint.constant = 162;
    }
}
person Martyn Davis    schedule 24.09.2015
comment
Вы можете иметь высоту 216 на iOS 8. Так что дело не в версии для iOS. Может быть, о версии Xcode и iOS Base SDK, да. - person Cœur; 19.01.2016
comment
Спасибо @Cœur за разъяснение относительно iOS 8. Так что это больше связано с инструментами разработки, чем со временем выполнения. - person Martyn Davis; 21.01.2016

Решение @LordParsley помогло.

Просто дополнительные детали:

Я заметил, что это происходит на iPhone 5 серии, а не на iPhone 6/6 plus с начальными и конечными ограничениями. Очевидно, ошибка появляется только при ширине кадра 320. Вероятно, это просчет подвидов выбора, который вызывает перекрытия. Это довольно забавно, потому что именно Apple установила значение по умолчанию, и все же они следили за этой проблемой.

В любом случае, я надеюсь, что это будет решено с iOS 9.1, которая сейчас находится в бета-версии.

person Teffi    schedule 21.09.2015
comment
Все еще не исправлено в 9.1 beta 3 - person Mike M; 05.10.2015

У меня такая же проблема при запуске моего приложения в iOS 9, мое приложение использует UIDatePicker в файле .xib. Я решил эту проблему, добавив ее в код:

UIDatePicker* picker = [[UIDatePicker alloc] initWithFrame:CGRectMake(0, 44, 320, 162)];
[self.view addSubview:picker];

Я думаю, это проблема с новым шрифтом San Francisco (шрифт больше, чем Helvetica) и файлом .xib. Надеюсь, это поможет. Благодарить!

person Franken    schedule 22.09.2015

На iPhone 5S iOS 9.1 названия месяцев усекаются при отображении UIDatePicker. Я исправил эту проблему, установив локальное свойство следующим образом:

NSLocale *uk = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
NSCalendar *cal = [NSCalendar currentCalendar];
[cal setLocale:uk];
[_backdateDatePicker setCalendar:cal];
person John John    schedule 23.11.2015