UIKeyboard在iOS7中不会自动半透明

时间:2013-12-27 02:18:48

标签: ios objective-c ios7 xcode5 uikeyboard

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

这就是我演示的内容:

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];

我甚至尝试将键盘外观类型设置为UIKeyboardAppearanceDefault和UIKeyboardAppearanceLight

有人可以指导/告诉我如何实现键盘半透明效果?这应该是自动的吗? 谢谢

编辑1:

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

3 个答案:

答案 0 :(得分:5)

您的代码,设置和示例在我的xCode上运行正常。我首先尝试将背景颜色设置为明显的红色。

self.view.backgroundColor = [UIColor redColor];

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

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

这显示出来,但没有红色那么多,因为我使用的图像类似于你所说的星系,因此其中有很多黑色。

最后,我尝试了您的确切代码,使用高斯模糊效果创建颜色。

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;

这也有效,但很难注意到。深色被高斯模糊一次并被键盘再次模糊的综合影响使其几乎无法察觉。我建议你尝试类似的方法,看看你是否真的得到一个透明的键盘,因为如果你给出的代码和信息是正确的,那么它似乎你是,也许看不到它。

键盘也只是略微透明,所以如果您期望完全透明,那么情况并非如此。这种轻微的透明度最小化,背景颜色越均匀,例如,如果你有一个全黑的或白色的背景,它将是不明显的。

编辑:我确认在运行iOS7.0.x的iPad上不是这种情况。即使使用Safari等标准应用程序,我也会获得标准的全灰键盘。苹果似乎没有优化这种大屏幕的透明度,这导致了滞后问题。它似乎在iOS7.1中已经部分修复,iOS7.1中有更多透明的iPad功能,但人们建议将它们关闭,因为它们会导致iPad运行速度比正常情况慢。

答案 1 :(得分:3)

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

对于导航栏和工具栏,从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或更高版本。您可以downloading an older version of Xcode and running your app in that version's simulator验证这一点。

就私有API而言,键盘背景由UIKBBackdropViewUIKBBackgroundView组成。您可以take a look at their extracted header files here,但如果您要提交到App Store,则不应修改这些内容。 (这些修改是拒绝的理由,也没有记录,因此可以在任何iOS更新中更改它们。)

答案 2 :(得分:1)

我构建了一个简单的应用程序来测试以尝试找到此问题,但我无法复制它,除非将IPHONEOS_DEPLOYMENT_TARGET设置为较低版本号(如6.0),然后在iOS 6.0上运行。在所有情况下,在所有iOS 7设备和模拟器上,默认键盘下方的内容都是半透明的模糊。

也许您可以分享图片或示例项目?

Set Xcode to target running on iOS 6.0 simulator

No translucency to the keyboard

Set Xcode to target running on iOS 7.0 simulator

Translucency to the keyboard