【问题标题】:UIKeyboard not automatically translucent in iOS7UIKeyboard 在 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,键盘无论如何都不会模糊。您可能没有打开它,所以这可能不是您的问题,但如果您发布此应用,请记住这一点。

标签: ios objective-c ios7 xcode5 uikeyboard


【解决方案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键盘永远不会是半透明的?是否有任何文件可以证实这一点,所以我终于可以结束这个了
猜你喜欢
  • 2013-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-23
  • 2021-11-01
相关资源
最近更新 更多