【问题标题】:How do I change label text to contrast with toolbar background color in UISplitView?如何更改标签文本以与 LIStView 中的工具栏背景颜色形成对比?
【发布时间】:2011-10-03 06:21:15
【问题描述】:

使用 Apple 的 UISplitViewController 时,主视图在纵向模式下具有黑色工具栏,在横向模式下具有灰色。

我在工具栏上的 UIView 内创建了一个标签,如下所述:Adding a UILabel to a UIToolbar,但默认情况下,文本为黑色,这意味着它仅在横向模式下可见。

我应该如何对视图控制器进行编码,以便它可以更改文本颜色,使其始终可见,并且最好与邮件等 Apple 应用程序的工作方式相匹配(纵向为白色,横向为深灰色)?


...之后...

按照 Alan Moore 的回答,我决定使用如下代码:

UIInterfaceOrientation o = [UIApplication sharedApplication].statusBarOrientation;
if (UIDeviceOrientationIsPortrait(o)) 
    label.textColor = [UIColor whiteColor];
else
    label.textColor = [UIColor darkTextColor];

这是从我的 viewDidLoad 和 didRotateFromInterfaceOrientation 方法中调用的。在我看来,对于这种情况,didRotate 比 shouldRotate 更好。

还请注意,我正在查询 statusBar,因为在我看来 self.interfaceOrientation 总是返回 1。这也在这里注明:Determine UIInterfaceOrientation on iPad

不是 100% 确定 darkText 是横向的正确颜色。

【问题讨论】:

  • 如果您可以提供一些示例代码,建议更改会更容易。
  • 对不起,代码在我链接到的项目中,目前有 41 票。实际上,我在“Matt R”的答案中使用了 Interface Builder 方法,但效果相同。

标签: ios ipad uisplitviewcontroller


【解决方案1】:

我会添加代码到

- (BOOL)shouldAutorotateToInterfaceOrientation:(...) {
}

它会在你的标签上执行 setTextColor,具体取决于它是旋转到纵向还是横向模式。

【讨论】:

  • 嗯。首次展示的情况如何?根据经验,应该在 viewDidLoad 之后调用 shouldAutorotate,但可以保证吗?
  • 保证?好吧,我还没有看到任何 Apple 文档说它有保证,但我认为它必须调用它才能确定如何绘制视图。
  • UIViewController 文档确实描述了应该发生的情况:在启动时,应用程序应始终将其界面设置为纵向。在 application:didFinishLaunchingWithOptions: 方法返回后,应用程序使用上述视图控制器旋转机制将视图旋转到适当的方向,然后再显示窗口。
  • 我接受了你的回答,因为你帮助我按照正确的思路思考。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-21
  • 2020-02-14
相关资源
最近更新 更多