【问题标题】:iOS Launch Storyboard: How can I change a Tab Bar's tint color?iOS 启动故事板:如何更改标签栏的色调颜色?
【发布时间】:2016-06-15 23:34:31
【问题描述】:

我在做什么:

使用“启动故事板”。它非常简单,并且包含一个默认的 UITabBarController。我在启动故事板和我的应用程序中将标签栏的“tintColor”设置为红色。我正在使用 Xcode 7、iOS 9。

什么不起作用:

启动屏幕使用默认的蓝色 iOS 色调加载标签栏...!然后在加载后,当启动屏幕故事板被替换时,色调颜色会变为红色。


您到底是如何在情节提要中设置标签栏的色调?

演示项目:http://s000.tinyupload.com/?file_id=73998115878034693063

【问题讨论】:

  • 快速说明:我也尝试将启动屏幕故事板中的“全局色调”设置为红色。没有运气。
  • 我不确定 Launch Storyboards 是否支持此功能...
  • @JAL 真的吗?哇,如果是这样的话,似乎有点疏忽了
  • 虽然您可以将 UI 元素添加到启动故事板,但我发现唯一可以更改颜色的元素是 UIView 的背景颜色。在此之前,我从未尝试在 Launch Storyboard 上放置任何不是 UIViewUIImageView 的东西。您可以使用所需颜色创建标签栏的图像并将其用作替代方案。
  • 实际上,我不确定能否重现您的问题。我可以在启动故事板中设置UITabBar 的颜色(我尝试了色调和背景颜色)并在启动时看到它们。是否可以显示您遇到的行为的屏幕截图?

标签: ios swift interface-builder uitabbarcontroller uistoryboard


【解决方案1】:

感谢@OIDor 的解决方案,这是一个很棒的技巧。

但要清楚,您不需要做所有这些。您所要做的就是:

  1. 编辑启动屏幕故事板的源并更改 launchScreen="YES"launchScreen="NO",这使您能够执行 下一部分...
  2. 在标签栏添加用户自定义属性tintColor 在故事板中。如果没有第一个,Xcode 不允许这样做 步骤

嘿,一切正常。

【讨论】:

    【解决方案2】:

    我想我已经弄清楚了。

    网上有很多关于 Launch Storyboard 工作原理的博客文章,但来自 Apple 的文章并不多。我从this blog post 中发现,其中讨论了启动屏幕图像是在运行时从启动故事板捕获的。深入我的模拟器目录发现它们实际上就在那里:

    我不知道为什么,但是当启动故事板加载时,设置UITabBartintColor 的调用没有及时触发,但是为其他值设置颜色,例如barTintColor 属性有效:

    我只能说:不支持在启动情节提要的视图控制器上将tintColor 设置为UITabBar。加载启动故事板时,幕后发生了一些事情,阻止了它的工作。

    TL;DR:你不能使用 Launch Storyboard 来做到这一点。有关诱使 Xcode 将你的 Launch Storyboard 视为常规 Storyboard 的解决方法,请参阅OlDor's answer

    作为替代方案,您可以在标签栏正确加载的情况下截取应用的屏幕截图,对其进行调整,然后在启动视图控制器上的 UIImageView 中使用它。

    如果您只想添加标签栏而不添加任何当前选定的标签,请在启动时添加UITabBar UIViewController 并根据自己的喜好设置UITabBarItems 的样式:

    这个UITabBar 有两个UITabBarItems 可以在不向其视图控制器添加插座的情况下设置样式。

    【讨论】:

    • 谢谢,不幸的是,这不能很好地适应不同的设备/方向。感谢您的帮助,我会给它几天时间看看是否有人有解决方法,然后将您的答案标记为正确。
    • @Jordan 别担心,好问题!
    【解决方案3】:

    正确的做法是混淆 Xcode。 Xcode 不应该知道使用的启动故事板实际上是launch 故事板。这样您就可以设置一些自定义User Defined Runtime Attributes。但是,您仍然无法运行一些自定义代码...

    所以...要做到这一点,请按以下步骤操作:

    1. 创建一个新的 Xcode 项目

    2. 将您的Main.storyboard 复制到桌面并将其重命名为CustomLaunchScreen.storyboard

    3. 将此CustomLaunchScreen.storyboard 添加到项目中。

    4. 打开您的 Info.plist file 并将密钥 Launch screen interface file base name 值从 LaunchScreen 更改为 CustomLaunchScreen

    5. 打开您的CustomLaunchScreen.storyboard。删除默认的UIViewController 并将UITabBarController 设置为您的initial view controller

    6. 打开UITabBarControllertabBar 属性并导航到User Defined Runtime Attributes

    7. 添加tintColor属性,将type设置为Color并设置一些自定义值。

    您也可以观看完整的视频教程Here

    【讨论】:

    • The right way to go is to confuse Xcode 不能说我同意这个实现,而且我确信这会与不同版本的 Xcode 冲突,但它确实解决了问题......谢谢,你真是个 hack在这里找到。
    • Xcode 和 iOS 的不同版本会造成很多问题,但我明白你的意思。如果 Apple 一开始就擅长的话,我不会采用一些 hacky 的解决方案。但是,正如您所见,它们并不总是尽力而为——IDE 缺乏很多功能。不过还是谢谢你的批评。
    • 投我一票,你比我回答得更好。我会再等几天,但如果 OP 对此解决方案感到满意,我希望将赏金奖励给你。感谢您的研究!
    • 这很有趣,感谢您和@Jordan 提出的问题
    • @OlDor 好黑客!我会再等几天以确保没有人知道更安全的方法,但你至少值得我投赞成票。我可能不会在实践中使用它,从经验来看,像这样的黑客有破解的诀窍......现在,将坚持没有亮点。你肯定已经回答了这个问题 - 谢谢!
    猜你喜欢
    • 2015-01-16
    • 2013-09-18
    • 2012-08-22
    • 2014-05-05
    • 2013-06-11
    • 2017-10-05
    • 1970-01-01
    • 2015-07-11
    • 1970-01-01
    相关资源
    最近更新 更多