UIKeyboard 在 iOS7 中不会自动半透明

Posted

技术标签:

【中文标题】UIKeyboard 在 iOS7 中不会自动半透明【英文标题】:UIKeyboard not automatically translucent in iOS7 【发布时间】:2013-12-27 02:18:47 【问题描述】:

我了解在 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,我有 iPad 第 3 代和 iPad 第 4 代,都带有视网膜显示器。 运行 iOS 7.0.2

【问题讨论】:

您是否在 Xcode 5 和 iOS 7 中创建了项目。 是的,我有沙比尔!正如我所说,我只是打开了 xcode 5.0.3 并显然使用基于单一的视图应用程序创建了一个 ios 7 项目,并添加了一个简单的 uitextfield 视图的背景更改为彩色显示器,希望它通过半透明键盘显示.键盘不这样做!请让我知道发生了什么以及如何解决此问题!谢谢 你用的是什么设备? @LeoNatan 嘿,感谢您的光临,请查看更新后的帖子,我添加了更多信息。 我还没有真正看过这个,但我相信如果用户在可访问性中打开了Increase Contrast,键盘无论如何都不会模糊。您可能没有打开它,所以这可能不是您的问题,但如果您发布此应用,请记住这一点。 【参考方案1】:

您的代码、设置和示例在我的 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 运行速度比平时慢。

【讨论】:

这绝对是荒谬的!你的解释很漂亮,尤其是你最后一段解释透明度被最小化的地方。但是,我在 xCode 5.x.x 中创建了一个为 iOS 7 构建的新项目,将背景设置为红色,并截取了键盘,然后我还截取了苹果的记事本键盘,该键盘将悬停在白色页面背景之上,并比较了令人沮丧的照片仍然看不到键盘颜色的差异!我希望你的回答能有所启发:( @Pavan 由于速度问题,目前似乎仅限于 iPhone。在 iOS7.1 版本中可能会实现 感谢您的更新。您的编辑帮助您赢得了赏金。干杯。但请务必告诉我您的消息来源,以及您如何意识到 iOS 7.1 版本中的情况会更好。一些资料可以帮助我理清思路。【参考方案2】:

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 更新中进行更改。)

【讨论】:

老兄,我正在运行 ios 7.0.2 :) 所以根据你的帖子好友,我应该在我的键盘上看到半透明,我根本没有看到,这就是我在问题中所说的.其他 UI 元素的透明度很好,例如:导航栏、uisearchbar 等。感谢您花时间写您的帖子兄弟。它不适用于我的情况。 请再次彻底阅读我原来的问题。谢谢 您说您使用的是 Xcode 5.0.3(它不存在,所以我假设您的意思是 Xcode 5.0.2。)您是否尝试过我在 Xcode 5.0 上构建您的应用程序的建议? 啊哈对不起亚伦,那是一个错字。我正在使用 xCode 5.0.2。我正在下载 xcode 5.0,感谢您的链接,一旦我下载了文件并在旧版本的 xcode 上运行我的项目,我会尽快回复您。它必须通过模拟器还是我可以通过旧的 xcode 5.0 在我的设备上运行测试? 我认为 5.0 不会构建到 7.0.2 设备(但 5.0.1 会)。不过,我只有 75% 的把握是正确的。【参考方案3】:

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

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

【讨论】:

现在看看这太棒了。哥们你这是怎么弄的?我创建了一个新的 xCode 项目,将背景颜色设置为红色,根本无法获得任何半透明效果!!你能上传你的那个 xcode 项目,以便我可以下载它并在我的最后测试 我已经编辑了我的消息以显示在不同版本的 iOS 下运行的应用程序。我基本上做了你所做的。我创建了一个单视图应用程序。为了好玩,我使用绘制代码创建了一个 UIView 子类,它在视图中绘制了一堆涂鸦,但我可以将背景颜色设置为红色。我添加了一个 UITextField 来获取键盘。 好的,我到了某个地方,我注意到你们两个都在 iPhone 上进行了测试,所以这次我在 iPad 上进行了尝试,但部署为 iPhone 应用程序,键盘显示其半透明,但是当部署为iPad 应用程序的键盘不是半透明的。你能在ipad上部署并分享你的结果吗?因为它是一个 iPad 应用程序。 iPad 上的键盘永远不会是半透明的。键盘屏幕区域如此之大,模糊效果如此之慢,以至于他们从不这样做。即使您在 iPad 上运行针对 iPhone 的应用程序,键盘也不会是半透明的,Apple 也没有要求或建议它应该是半透明的。 我在我的 iPad 应用程序上运行了一个 iPhone 应用程序,并且键盘是半透明的,请记住它只是将 iPad 视为 iPhone 并将其放大。啊所以iPad键盘永远不会是半透明的?是否有任何文件可以证实这一点,所以我终于可以结束这个了

以上是关于UIKeyboard 在 iOS7 中不会自动半透明的主要内容,如果未能解决你的问题,请参考以下文章

UIButton iOS 7 跟随 UIKeyboard 动画

在 ios 8 中的 UITextview 中单击时,键盘不会弹出但在 ios 7 中运行良好

UIWebView youtube iframe api autoplay/playsinline 退出在 iOS7 中工作

PhoneGap:iOS 7 中的 UIPickerView 不会像在 iOS 6 中那样自动调整字体大小。关于如何在 iOS 7 中实现的任何解决方案?

在 HTML5 画布中绘制鼠标移动的半透明线

resignFirstResponder 没有在 iPad 中隐藏 UIkeyboard