UIKeyboard在iOS7中不会自动半透明

据我所知,在使用Xcode 5和iOS 7项目进行开发时,与UITextField交互时popup的键盘应该是半透明的,并通过背景中的任何颜色显示。 这两个项目都不是这种情况。 我有一个有色和模糊的背景,我希望通过键盘发射, 但键盘仍然是默认的白色/灰色。

这是我到目前为止的演示:

UIColor *tintColor = [UIColor colorWithWhite:0.21 alpha:0.4]; UIColor *background = [[UIColor alloc] initWithPatternImage:[[UIImage imageNamed:@"universe.jpg"] applyBlurWithRadius:19 tintColor:tintColor saturationDeltaFactor:1.8 maskImage:nil]]; self.view.backgroundColor = background; UITextField *text = [[UITextField alloc] initWithFrame:CGRectMake(200, 200, 300, 60)]; [self.view addSubview:text]; 

我甚至试图将键盘外观types设置为UIKeyboardAppearanceDefault和UIKeyboardAppearanceLight

有人可以请指导/告诉我怎样才能达到键盘半透明效果? 这应该是自动的? 谢谢

编辑1:

我有iPad mini,iPad 3代和iPad 4都带有视网膜显示器。 运行iOS 7.0.2

我构build了一个简单的应用程序来testing,试图find这个问题,但我已经无法复制它,除了设置IPHONEOS_DEPLOYMENT_TARGET到一个较低的版本号,如6.0,然后在iOS 6.0上运行。 在所有情况下,在所有iOS 7设备和模拟器上,默认键盘都会在其下面留下半透明的模糊内容。

也许你可以分享一个图片,或一个示例项目?

将Xcode设置为在iOS 6.0模拟器上运行的目标

没有半透明的键盘

将Xcode设置为在iOS 7.0模拟器上运行的目标

半透明的键盘

您的代码,安装程序和示例在我的xCode上运行良好。 我首先尝试将背景色设置为明显的红色。

 self.view.backgroundColor = [UIColor redColor]; 

这通过键盘显示。 之后,我尝试了一个没有模糊效果的图像。

 UIImageView* img = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"images.jpeg"]]; img.frame = self.view.frame; [self.view addSubview:img]; 

这是为了展示,但不如红色,因为我使用的图像是一个类似于你所说的银河系,因此有很多黑色的。

最后,我尝试使用高斯模糊效果来创build颜色。

 UIColor *tintColor = [UIColor colorWithWhite:0.21 alpha:0.4]; UIColor *background = [[UIColor alloc] initWithPatternImage:[[UIImage imageNamed:@"images.jpeg"] applyBlurWithRadius:19 tintColor:tintColor saturationDeltaFactor:1.8 maskImage:nil]]; self.view.backgroundColor = background; 

这也工作,但它是extreamly很难注意到。 深色被高斯一度模糊并被键盘再次模糊的联合作用使其几乎不明显。 我build议你尝试类似的方法,看看你是否真的得到一个透明的键盘,因为如果你给的代码和信息是正确的,那么看起来像你,也许看不到它。

此外,键盘只是稍微透明,所以如果你期望一个完全透明的话,情况并非如此。 这种轻微的透明度得到了最小化,例如,如果你有一个全黑或白色的背景,这将是不明显的背景颜色更均匀。

编辑:我确认这不是运行iOS7.0.x的iPad上的情况我得到的标准全灰色键盘,即使使用标准的应用程序,如Safari。 看起来苹果并没有优化这种大屏幕的透明度,而是造成了滞后问题。 这似乎也是在iOS7.1中部分修复的,iOS7.1中有更多透明的iPadfunction,但是人们build议将它们closures,因为它们导致iPad运行速度比平时慢。

iOS 7.0.3减less了导航栏,工具栏和键盘的大部分半透明度。

对于导航栏和工具栏,从iOS 7.0.3开始,如果您希望它更加透明,可以将UIColor集的alpha属性设置为barTintColor

就公共API而言,iOS 7中的键盘仍然只有这些选项:

 textField.keyboardAppearance = UIKeyboardAppearanceDefault; // the default (same as light) textField.keyboardAppearance = UIKeyboardAppearanceDark; // dark look (previously UIKeyboardAppearanceAlert) textField.keyboardAppearance = UIKeyboardAppearanceLight; // light look 

所以我假设你没有得到你想要的透明度,因为你使用的是iOS 7.0.3或更高版本。 您可以通过下载旧版本的Xcode并在该版本的模拟器中运行您的应用程序来validation。

就私有API而言,键盘背景由UIKBBackdropViewUIKBBackgroundView 。 你可以在这里看看他们提取的头文件 ,但是如果你提交给App Store的话,你不应该修改这些文件 。 (这些修改是拒绝的理由,也没有logging,所以可以在任何iOS更新中更改。)