这是一个非常基本的问题,我无法找到答案。Xcode中的色调是什么?为什么所有视图的默认色调都是蓝色?这会有什么影响?我注意到这些视图中的一些图像的颜色看起来不太正确,除非我将色调设置为白色,而且因为我不明白它的作用而不得不将每个新视图的色调设置为白色,这真的很烦人。
ozxc1zmp1#
This article有一个伟大的解释和贯穿它,但总结一下,色调是一个简单的方法来突出交互元素与您选择的颜色。它还可以与UIImage结合使用,将renderingMode属性设置为UIImageRenderingModeAlwaysTemplate或(在某些情况下,如标签栏中的图像)UIImageRenderingModeAutomatic时为图像着色。我猜这就是当某些图像将其颜色更改为蓝色时所遇到的情况,这是默认应用程序tintColor。
renderingMode
UIImageRenderingModeAlwaysTemplate
UIImageRenderingModeAutomatic
tintColor
iyfamqjs2#
淡色可以被认为是用于没有自己颜色的图像的颜色。当图像被渲染为"模板"时,它们没有自己的颜色,正如你在rendering mode中看到的。这是因为当图像被渲染为模板时,它们的颜色值被忽略,它们的alpha被设置为0,并被淡色替换。例如,假设您将系统映像设置为按钮:
let button = UIButton(frame: CGRect(origin: CGPoint(x: self.view.bounds.midX, y: self.view.bounds.midY), size: .init(width: 200, height: 200))) let image = UIImage(systemName: "trash") button.setImage(image, for: .normal) self.view.addSubview(button)
所有符号图像都是模板图像,这意味着它们的颜色由您设置的色调颜色决定。默认色调颜色恰好是蓝色,这就是符号显示为蓝色的原因:
所有子视图都继承色调颜色,这意味着如果要将其中一个超级视图的色调颜色更改为红色:
self.view.tintColor = .red
假设您可以将此符号的alpha设置为1,这将用其原始颜色替换色调颜色,或者使用withRenderingMode(_:)强制使用.alwaysOriginal渲染符号:
.alwaysOriginal
let image = UIImage(systemName: "trash")?.withRenderingMode(UIImage.RenderingMode.alwaysOriginal)
正如我提到的,色调颜色是继承的,这意味着你不必设置每个视图的色调颜色。你可以改变UIWindow的色调颜色,也可以在界面生成器的文件检查器中改变全局色调:
UIWindow
最后,如果您希望从资源目录中获取一个自定义图像以渲染为模板,则可以在资源目录的"属性检查器"中设置渲染模式:
hvvq6cgz3#
淡色是应用程序或UIView的“默认”或“回退”颜色。正如Apple所述,“* 它是层次结构中的第一个非默认颜色。UIView的所有子类都从基类.* 中派生出它们对tintColor的行为。"。因此,如果您向项目添加新的视图控制器,并且其淡色为蓝色,则当您向该视图添加按钮时,此按钮的标题文本也为蓝色。这是因为此按钮的色调将从主视图(其色调为蓝色)继承。更改主视图的色调也将更改其子视图的标题颜色。
7gyucuyw4#
色调是文本字段、标签等的默认颜色。色调不起任何作用,它只是改变某些属性的颜色(例如文本字段和标签等变为蓝/红/绿色等)。不幸的是,由于它是Xcode程序的默认颜色,你将不得不继续改变色调,因为它很烦人。希望这能有所帮助:)
xuo3flqw5#
从iOS 9中的UIView API来看,tintColor似乎是通用的,作为一个通用的便利属性提供,可在视图中的任何位置使用:
UIView
如果系统无法在层次结构中找到非默认颜色,则此属性的值将改为系统定义的颜色。
来自Xcode 6发行说明:
Objective-C API现在可以使用null_resetable property属性来表示属性的空性,这些属性的setter允许nil(将值“重置”为某个默认值),但getter从不产生nil(因为它们提供了某个默认值)。其中一个这样的属性是UIView中的tintColor,当没有指定色调颜色时,它会替换默认的系统色调颜色。
zdwk9cvp6#
UIView的backgroundColor属性设置视图背景的颜色。此属性影响整个视图的背景,并用于为视图内绘制的内容提供背景颜色。另一方面,UIView的tintColor属性用于设置视图中包含的任何可点击元素或控件的颜色。这包括按钮、分段控件和其他类似的UI元素。tintColor还用于为选定的元素或状态更改着色,例如选定表行时复选标记的颜色。总之,backgroundColor影响整个视图的背景颜色,而tintColor影响视图中任何可点击元素或控件的颜色。
backgroundColor
6条答案
按热度按时间ozxc1zmp1#
This article有一个伟大的解释和贯穿它,但总结一下,色调是一个简单的方法来突出交互元素与您选择的颜色。
它还可以与UIImage结合使用,将
renderingMode
属性设置为UIImageRenderingModeAlwaysTemplate
或(在某些情况下,如标签栏中的图像)UIImageRenderingModeAutomatic
时为图像着色。我猜这就是当某些图像将其颜色更改为蓝色时所遇到的情况,这是默认应用程序tintColor
。iyfamqjs2#
淡色可以被认为是用于没有自己颜色的图像的颜色。当图像被渲染为"模板"时,它们没有自己的颜色,正如你在rendering mode中看到的。这是因为当图像被渲染为模板时,它们的颜色值被忽略,它们的alpha被设置为0,并被淡色替换。
例如,假设您将系统映像设置为按钮:
所有符号图像都是模板图像,这意味着它们的颜色由您设置的色调颜色决定。默认色调颜色恰好是蓝色,这就是符号显示为蓝色的原因:
所有子视图都继承色调颜色,这意味着如果要将其中一个超级视图的色调颜色更改为红色:
假设您可以将此符号的alpha设置为1,这将用其原始颜色替换色调颜色,或者使用withRenderingMode(_:)强制使用
.alwaysOriginal
渲染符号:正如我提到的,色调颜色是继承的,这意味着你不必设置每个视图的色调颜色。你可以改变
UIWindow
的色调颜色,也可以在界面生成器的文件检查器中改变全局色调:最后,如果您希望从资源目录中获取一个自定义图像以渲染为模板,则可以在资源目录的"属性检查器"中设置渲染模式:
hvvq6cgz3#
淡色是应用程序或UIView的“默认”或“回退”颜色。正如Apple所述,“* 它是层次结构中的第一个非默认颜色。UIView的所有子类都从基类.* 中派生出它们对tintColor的行为。"。因此,如果您向项目添加新的视图控制器,并且其淡色为蓝色,则当您向该视图添加按钮时,此按钮的标题文本也为蓝色。这是因为此按钮的色调将从主视图(其色调为蓝色)继承。更改主视图的色调也将更改其子视图的标题颜色。
7gyucuyw4#
色调是文本字段、标签等的默认颜色。色调不起任何作用,它只是改变某些属性的颜色(例如文本字段和标签等变为蓝/红/绿色等)。不幸的是,由于它是Xcode程序的默认颜色,你将不得不继续改变色调,因为它很烦人。希望这能有所帮助:)
xuo3flqw5#
从iOS 9中的
UIView
API来看,tintColor
似乎是通用的,作为一个通用的便利属性提供,可在视图中的任何位置使用:如果系统无法在层次结构中找到非默认颜色,则此属性的值将改为系统定义的颜色。
来自Xcode 6发行说明:
Objective-C API现在可以使用null_resetable property属性来表示属性的空性,这些属性的setter允许nil(将值“重置”为某个默认值),但getter从不产生nil(因为它们提供了某个默认值)。其中一个这样的属性是UIView中的tintColor,当没有指定色调颜色时,它会替换默认的系统色调颜色。
zdwk9cvp6#
UIView
的backgroundColor
属性设置视图背景的颜色。此属性影响整个视图的背景,并用于为视图内绘制的内容提供背景颜色。另一方面,
UIView
的tintColor
属性用于设置视图中包含的任何可点击元素或控件的颜色。这包括按钮、分段控件和其他类似的UI元素。tintColor
还用于为选定的元素或状态更改着色,例如选定表行时复选标记的颜色。总之,
backgroundColor
影响整个视图的背景颜色,而tintColor
影响视图中任何可点击元素或控件的颜色。