【问题标题】:iOS - Tint color changes when pressing backiOS - 按返回时色调颜色会发生变化
【发布时间】:2014-09-04 04:30:18
【问题描述】:

我在情节提要中将全局色调颜色设置为蓝色,一切正常,但是当按下返回按钮时,导航图标或条形分段控件等某些项目变为灰色。这个问题只发生在 iOS7 中。

我知道这个问题很笼统,但我不知道代码的哪一部分导致了这个问题。希望有人遇到过类似的问题并可以分享他们的想法。

【问题讨论】:

  • 没有代码我们怎么知道?
  • 你能否把这个问题说得更清楚些。放一些代码。
  • 由于我在情节提要中设置了 tint color 并且问题发生在所有视图控制器中,我不知道需要共享哪些代码
  • 你有没有找到解决办法?
  • 是的@KathiravanG,请看一下接受的答案

标签: ios ios7 colors tint


【解决方案1】:

在某些情况下,将tintAdjustmentMode 设置为窗口或控制器的view 是不够的,这肯定是因为层次结构中的某些视图会覆盖该值。然后你必须手动设置相关视图的色调模式。

如果您像我一样尝试尽可能多地使用 Interface Builder,您可以使用 Runtime Attributes:

1 的值来自模式的定义:

enum UIViewTintAdjustmentMode : Int {

    case Automatic

    case Normal
    case Dimmed
}

除非另有设置,否则为案例分配从0 开始的编号。

【讨论】:

    【解决方案2】:

    我认为 tintAdjustmentMode(UIView property) 导致了这个问题。尝试将窗口的 tintAdjustmentMode 设置为 UIViewTintAdjustmentModeNormal。

    在您的委托中:

    self.window.tintAdjustmentMode = UIViewTintAdjustmentModeNormal;
    

    【讨论】:

      【解决方案3】:

      您可以为任何这些子视图及其后代手动覆盖此属性。换句话说,如果每个视图自己的 tint color 为 nil,则每个视图都会继承其父视图的 tint color。如果视图层次结构中的最高级别视图的 tint color 值为 nil,则默认为系统蓝色。您在屏幕 1 和屏幕 2 中编写此代码。

      self.view.tintColor = [UIColor redColor];
      

      【讨论】:

        【解决方案4】:

        将这段代码添加到段中:

        self.segmentedControl.tintAdjustmentMode = UIViewTintAdjustmentModeNormal;    
        

        如果这可行,您应该检查您的代码,如果您在添加或删除视图时出现任何问题。我想问题是你没有以正确的方式使用它,因此它为 segmentedControl 设置了灰色,就像它在显示弹出框或工作表时所做的那样。

        【讨论】:

        • 每次弹出框出现时,我的 UISegmentedControls 都会“丢失”它们的色调。我几乎尝试了所有方法来覆盖默认的“设置为灰色”行为(没有运气)。这解决了问题。 (在窗口上设置 tintAdjustmentMode 并不能解决问题。)
        • 这对我有用。在窗口上设置并不能解决问题。
        【解决方案5】:

        这对于appearance proxies 来说可能是一个很好的例子。你可以这样做……

        [[UISegmentedControl appearance] setTintColor:[UIColor redColor]];
        

        ...默认情况下使UISegmentedControl 的每个实例都具有相同的颜色。请记住,UIAppearance 样式是在运行时应用的。

        【讨论】:

          【解决方案6】:

          我在当前的项目中遇到了同样的问题。好吧,既然你没有提供任何代码,我会尽力向你解释。确保在您想要的每个视图控制器中都设置了色调颜色。例如,我遇到了同样的错误,因为我在一个视图控制器中设置了色调颜色而在另一个视图控制器中忘记了它。因此,每当我转到未设置色调颜色的第二个视图控制器时,它会将整个内容设置为该颜色。所以当我回到原来的视图控制器时,它会改变第二个视图控制器的颜色。我希望这对你有意义,如果没有,请告诉我,我可以为你改写。

          【讨论】:

          • 我认为如果色调颜色由代码设置,您的建议很有用。就我而言,它在情节提要中设置了全局色调颜色,它将应用于整个应用程序,您无法更改单个视图控制器。
          【解决方案7】:

          这是一个简单的问题。您面临继承颜色的问题 在您的蓝色加载之后首先加载。您可以看到它们的属性颜色。具有默认颜色设置灰色

          【讨论】:

          • 如果是这样,我该如何设置默认颜色?您能否添加更多详细信息。谢谢
          • @doreamon 设置为nil,会自动继承superview的tintColor
          猜你喜欢
          • 1970-01-01
          • 2017-01-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多