Xcode中的"tint"是什么意思?

12
这是一个非常基础的问题,但我找不到答案。在Xcode中,“tint”是什么意思?为什么所有视图的默认色调都是蓝色?它有什么影响?我注意到这些视图中的某些图像的颜色看起来不太对,除非我将“tint”设置为白色,但由于我不理解它的作用,每次都要将新视图的“tint”设置为白色非常麻烦。
6个回答

7

这篇文章有很好的解释和演示,但简而言之,tint是一种使用您选择的颜色突出显示交互元素的简单方法。

它还与UIImage一起使用,将其renderingMode属性设置为UIImageRenderingModeAlwaysTemplate或(在某些情况下,如选项卡中的图像)UIImageRenderingModeAutomatic来给图像上色。我猜当某些图像变成蓝色时,这就是您遇到的问题,因为这是默认应用程序tintColor


6

Swift 5

色调颜色可以被视为用于没有自己颜色的图像的颜色。当图像以“模板”形式呈现时,可以看到它们没有自己的颜色,如渲染模式所示。这是因为当图像作为模板呈现时,它们的颜色值被忽略,其 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)

所有符号图像都是模板图像,这意味着它们的颜色由您设置的色调颜色确定。恰好默认的色调颜色是蓝色,这就是为什么该符号显示为蓝色的原因:

enter image description here

Tint颜色会被所有子视图继承,这意味着如果您要将其中一个父视图的Tint颜色更改为红色:
self.view.tintColor = .red

enter image description here

假设您可以将此符号的 alpha 值设置为 1,这将用其原始颜色替换着色颜色,或者通过使用 withRenderingMode(_:) 强制将符号呈现为 .alwaysOriginal

let image = UIImage(systemName: "trash")?.withRenderingMode(UIImage.RenderingMode.alwaysOriginal)

enter image description here

正如我所提到的,色调颜色是继承的,这意味着您不必设置每个视图的色调颜色。您可以更改UIWindow的色调颜色或在界面生成器的文件检查器中更改全局色调:

enter image description here

最后,如果您想让资产目录中的自定义图像作为模板呈现,您可以在资产目录的属性检查器中设置呈现模式:

enter image description here


3

颜色着色是应用程序或UIView的“默认”或“回退”颜色。苹果公司指出,“它是层次结构中第一个非默认颜色。UIView的所有子类都从基类派生其tintColor行为。”因此,如果您向项目添加新的视图控制器,它的颜色着色为蓝色,则当您在此视图中添加按钮时,此按钮的标题文本也将是蓝色的。这是因为按钮的tintcolor将从主视图(其tint color为蓝色)继承。更改主要视图的tint color也会改变其子视图的标题颜色。


1
Tint是文本框、标签等的默认颜色。 Tint不会影响任何内容,只会更改某些属性的颜色(例如将文本框和标签等更改为蓝色/红色/绿色等)。不幸的是,由于它是Xcode程序的默认颜色,您将不得不继续保持更改Tint,尽管这很烦人。希望这可以帮到您 :)

1
从 iOS 9 中的 UIView API 来看,tintColor 似乎是一个通用的属性,提供了一种方便的方式来在视图上使用。如果系统在层次结构中找不到非默认颜色,则该属性的值将是系统定义的颜色。
从 Xcode 6 发布说明中可以看出,Objective-C API 现在可以使用 null_resettable 属性标记来表达那些 setter 允许 nil(将值“重置”为某个默认值),但 getter 永远不会产生 nil(因为它们提供了一些默认值)的属性的可空性。UIView 中的 tintColor 就是这样的一个属性,当没有指定 tint color 时,它会替换为默认的系统 tint color。

0

UIViewbackgroundColor 属性设置视图的背景颜色。该属性影响整个视图的背景,并用于为视图内绘制的内容提供背景颜色。

另一方面,UIViewtintColor 属性用于设置视图中包含的任何可点击元素或控件的颜色。这包括按钮、分段控件和其他类似的 UI 元素。当选择元素或状态更改时,例如在选择表格行时的勾选标记的颜色,也会使用 tintColor 进行着色。

总之,backgroundColor 影响整个视图的背景颜色,而 tintColor 影响视图内任何可点击元素或控件的颜色。


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