iOS9:UIDatePicker与datePickerMode的UIDatePickerModeTime只显示小时,没有分钟

时间:2015-07-29 19:32:10

标签: xcode uidatepicker xcode7 ios9 uidatepickermodetime

我在iOS9模拟器上使用Xcode beta 7。 使用带有UIDatePickerModeTime的datePickerMode的UIDatePicker只显示小时数,而不是分钟数。

见截图:

enter image description here

在iOS 7和8上,显然它按预期工作,并显示小时和分钟。截图:

enter image description here

我真的不想重新发明轮子并滚动我自己的时间选择器。关于为什么会发生这种情况以及如何解决的任何想法?我无法在谷歌上找到任何东西。

感谢, 亚历

5 个答案:

答案 0 :(得分:23)

我在iOS9的公开发布后使用UIDatePicker在我的tableview中使用UIDatePickerModeDate来解决这个问题。

我通过在显示之前更改UIDatePicker模式,然后将其更改回所需的模式来攻击它:

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

我猜重绘它解决了这个问题。出于利益的考虑,我认为这实际上不是显示分钟而是显示子视图中的错误的问题,因为这是我的看法:

UIDatePicker with white blocking space.

检查使用FLEX,这是具有纯白色背景的UIDatePicker的一部分。

UIDatePicker bug in subviews.

答案 1 :(得分:8)

在iOS 9发行说明中找到了对此问题的有用描述 - 似乎我应该更仔细地阅读这些内容。

  

UIPickerView和UIDatePicker现在可以调整大小和自适应 - 以前,即使您尝试调整大小,这些视图也会强制执行默认大小。现在,这些视图在所有设备上的默认宽度均为320点,而不是iPhone上的设备宽度。   在针对iOS 9编译时,依赖于旧的默认大小强制执行的接口可能看起来有问题。通过将选择器视图完全约束或调整大小到所需大小而不依赖于隐式行为,可以解决遇到的任何问题。

iOS 9 Release Notes

在我的情况下,我所要做的就是删除UIDatePicker上的所有约束,然后"重置为建议的约束"。重建,现在一切都很顺利。

答案 2 :(得分:2)

将Xcode升级到7.0时出现问题。

根据LordParsley的回答,当显示UIDatePicker时,中间部分是空白的。

iOS 9的UIDatePicker高度为216;而早期版本的高度为162,强制高度为162解决了问题。

由于我的视图是在故事板中定义的,因此我在UIDatePicker上设置了一个高度约束,并将iOS版本的高度设置为162。 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;
    }
}

答案 3 :(得分:1)

@LordParsley解决方案成功了。

只是一些额外的细节:

我注意到它出现在iPhone 5系列上,而不是iPhone 6/6 plus上带有前导和尾随约束。 显然只有在帧宽为320 时才会出现错误。可能是错误计算导致重叠的选择器子视图。这很有趣,因为Apple是设置默认值的人,但他们已经监督了这个问题。

无论如何,我希望这可以通过iOS 9.1解决,现在处于测试阶段。

答案 4 :(得分:1)

我在iOS 9中运行我的应用程序时遇到同样的问题,我的应用程序使用.xib文件中的UIDatePicker。 我通过在后面的代码中添加它解决了这个问题:

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

我认为,这是旧字体旧金山(字体比Helvetica大)和.xib文件的问题。 希望这有帮助。 谢谢!