在iOS 7中反转UIDatePicker的颜色

5
我希望先说一下,我本来会将这个问题发布在 Apple Dev 论坛上,但由于黑客攻击事件之类的事情,该论坛已经下线近两周了,而我需要尽快找到解决方案。
在 iOS 7 中,UIDatePicker 的外观是这样的: enter image description here 有一位客户要求它的外观如下: enter image description here (基本上是翻转的。)
我尝试了一些方法:
  1. 将背景设置为黑色,并循环遍历所有视图的子视图,直到到达显示日期本身的标签并将它们的颜色更改为白色。问题是该视图仅有一个子视图,而且该子视图没有自己的任何子视图。因此,这个解决方案不起作用(在iOS6中可以)。

  2. 过滤器应用于视图的CALayer。问题是这只能在OS X上实现,而不能在iOS上实现,原因未知。

  3. 尝试使用UIApperance协议。从我所了解的来看,这应该是可行的,但我尝试过的方法并不起作用,而且我对此也没有深入的经验来找出原因。

你有什么想法?这真的可能吗?我在解决问题的方法上犯了错误吗?


你解决这个问题了吗?我也遇到同样的困难。 - ijason03
@ijason03 没有,这是不可能的,或者至少对于非苹果开发者来说是不可能的。 - skytz
请将UIDatePicker的文本颜色自定义为iOS7中类似Mailbox的样式。 - Sig
8个回答

6

试试这个:

将这段代码放在-(void)viewDidLoad

[datePicker setValue:[UIColor whiteColor] forKey:@"textColor"];

Swift:

datePicker.setValue(UIColor.white, forKey: "textColor")

它是否与iOS 7.0兼容? - demon9733
当然,记得将uiDatePickerOutlet替换为你的日期选择器outlet。 - aashish tamsya

3

不知道这是否仍然相关,但在Swift 3 / Xcode 8上,您可以简单地执行以下操作:

let datePicker = UIDatePicker()
datePicker.datePickerMode = UIDatePickerMode.date

// Sets the text color
datePicker.setValue(UIColor.white, forKey: "textColor")
// Sets the bg color
datePicker.backgroundColor = UIColor.black.withAlphaComponent(0.6)

textField.inputView = datePicker

2
我曾经花了很多时间来解决同样的问题。一开始,我将UIDatePicker放在黑色背景上,不知道为什么它是不可见的...
最终,我在日期选择器后面放了一个白色的UIView作为背景,这样整个视图都是黑色的,而日期选择器是白色的。实际上看起来还不错,虽然幸运的是我没有客户会指定设计。
对于客户的一个可能的论点:旧版iOS7之前的日期选择器也有预定义的不可定制背景。

1

我理解你的沮丧,但是iOS7受NDA保护。
通常这种视图使用层来创建,因为子层变换可以产生3D效果。如果你找不到子视图,我建议检查子层。
另一个要点是不要太过于修改视图/层级结构,因为从iOS<=6到iOS7的转换表明这样做并不是一个好主意。
UIAppereance协议可能是一个好选择,因为它允许你改变你能改变的东西(而不会在未来出现问题),也许你可以设置一个背景图片,尝试设置一个1x1像素的黑色png,你还应该看到一个带属性的字符串属性或文本属性。


1

0

0
根据iOS设计资源:
无法自定义日期选择器的外观。
我建议以下之一:
重新设计您的UI以使用黑色文本
使用自定义日期选择器。

0
你应该告诉你的客户,他的建议违背了iOS 7的设计原则,这是事实。我自己并不是iOS 7的忠实粉丝,但我们都应该试一试。你的客户应该暂时接受标准的iOS 7用户界面,直到他有足够的信息做出明智的判断。根据他最初的印象来设计一个应用程序只会导致灾难。

1
我不确定是否真的违反了设计原则,因为大多数其他 UI 元素的颜色都可以更改,包括常规的 UIPicker。但我不知道为什么苹果会跳过对这个元素进行着色的能力。 - arlomedia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接