iOS 启动故事板:如何更改选项卡栏的着色颜色?

6

我的工作内容:

使用“启动故事板”。这很简单,包含一个默认的UITabBarController。我在启动故事板和我的应用中将标签栏的“tintColor”设置为红色。我使用的是Xcode 7,iOS 9。

出现了什么问题:

启动屏幕使用默认的蓝色iOS色调加载选项卡栏...!然后在加载后,当启动屏幕故事板被替换时,色调颜色会切换到红色。


你该如何在故事板中设置标签栏的色调颜色呢?

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


快速注释:我已经尝试将启动屏幕故事板中的“全局色调”设置为红色。没有成功。 - Jordan Smith
@JAL 真的吗?哇,如果是这样的话,那似乎是一个相当大的疏忽。 - Jordan Smith
其实,我不确定我能否重现你的问题。我可以在启动故事板中设置UITabBar的颜色(我尝试了色调和背景颜色),并在启动时看到它们。你能否展示一下你所遇到的行为的屏幕截图? - JAL
@JAL 谢谢,感谢您的帮助。它似乎支持...但可能不支持色调。然而,在界面生成器中,即使在启动屏幕故事板之外,色调也不受支持,这很奇怪。 - Jordan Smith
@JAL 刚刚注意到苹果应用程序甚至不会在其启动故事板上显示选项卡栏部分/图像。还注意到一个流行的应用程序在启动时显示选项卡栏部分,但没有突出显示任何内容...(不确定他们是如何做到的)。我想这很可能是无法完成的(或者不是意味着要完成的)。 - Jordan Smith
显示剩余10条评论
3个回答

5
正确的方法是混淆Xcode。 Xcode不应该知道使用的启动故事板实际上是一个launch故事板。这样,您就可以设置一些自定义的User Defined Runtime Attributes。但是,您仍然无法运行一些自定义代码...
所以... 要做到这一点,请按照以下步骤进行:
  1. 创建一个新的Xcode项目
  2. 将您的Main.storyboard复制到桌面并将其重命名为CustomLaunchScreen.storyboard
  3. 将此CustomLaunchScreen.storyboard添加到项目中。
  4. 打开您的Info.plist文件,并将键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

“走的正确方式是混淆Xcode”。我不同意这种实现方法,而且我相信它在不同版本的Xcode上会出问题,但它确实解决了问题...谢谢,你找到了一个相当巧妙的方法。 - JAL
很多东西在不同版本的Xcode和iOS上都会出现问题,但我明白你的意思。如果苹果一开始就做得好,我不会采用一些hacky的解决方案。然而,正如你所看到的,他们并不总是尽力而为——IDE缺乏相当多的功能。但无论如何,感谢您的批评。 - OlDor
你的回答比我更好,我会给你点赞。我会再等几天,但如果提问者对这个解决方案满意的话,我会授予你奖励。感谢你的研究! - JAL
那真是很有趣,所以感谢你和@Jordan提出的问题。 - OlDor
@OlDor 不错的黑客技巧!我会再等几天,确保没有更安全的方法,但你至少值得我的点赞。根据经验,像这样的黑客攻击往往容易出问题...目前,我还是不使用高亮功能。你肯定回答了我的问题 - 谢谢! - Jordan Smith
好的,我将授予您赏金,再次感谢您的回答!现在该由@Jordan接受了。 - JAL

1
感谢@OIDor提供的解决方案,这是一个很好的技巧。
然而,需要明确的是,您不需要做所有的事情。您只需要:
1.编辑启动屏幕故事板的源代码,并将launchScreen ="YES"更改为launchScreen ="NO",这使您可以执行下一步......
2.在故事板中的选项卡栏上添加用户定义的属性tintColor。如果没有第一步,Xcode不允许这样做。
嘿,瞧,它都正常工作了。

0

我想我已经弄清楚了这个问题。

关于启动故事板的工作原理,网上有很多博客文章,但苹果公司并没有提供太多相关信息。我从这篇博客文章中发现,启动屏幕图像是在运行时从启动故事板中捕获的。深入研究模拟器目录后,我发现它们确实存在:

launch1

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

launch2

我能说的是:在启动故事板中设置视图控制器上的UITabBartintColor不受支持。当加载启动故事板时,有一些幕后操作阻止了这个功能的工作。 简而言之:你不能在启动故事板中这样做。如果想要一个解决方法,可以欺骗Xcode将你的启动故事板视为常规故事板,请参见OlDor's answer
作为替代方案,您可以拍摄您的应用程序的屏幕截图,并进行微调,然后在启动视图控制器上使用UIImageView
如果您只想添加标签栏而没有任何当前选定的选项卡,请将UITabBar添加到您的启动UIViewController中,并将UITabBarItem样式设置为您喜欢的样式:

tab

这个 UITabBar 有两个 UITabBarItem,可以在不添加到它们的视图控制器中的输出口的情况下进行样式设置。


谢谢,不幸的是,这种方法在不同设备/方向上无法很好地扩展。感谢您的帮助,我会再等几天看看是否有解决方法,然后将您的答案标记为正确。 - Jordan Smith
@Jordan 不用担心,这是个很好的问题! - JAL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接