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

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

Смотрите снимок экрана:

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

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

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

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

спасибо, Alex

Ответ 1

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

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

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

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

Ответ 2

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

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

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

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

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

Проверяя использование FLEX, это часть UIDatePicker, у которой есть сплошной белый фон.

Ошибка UIDatePicker в подзаголовках.

Ответ 3

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

Когда отобразился UIDatePicker, средняя часть была пуста, как ответ лорда Парсли.

Высота 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;
    }
}

Ответ 4

Решение @LordParsley выполнило трюк.

Только некоторые дополнительные детали:

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

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

Ответ 5

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

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

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

Ответ 6

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

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