UIButton系统与颜色,图像,状态等方面的自定义相比?

时间:2017-11-24 07:30:33

标签: ios uibutton

UIButtonType customsystem之间有什么区别。 adjustsImageWhenHighlighted等财产如何影响我提供的图像?

如果我只提供一些图像而不提供其他图像会怎么样?

1 个答案:

答案 0 :(得分:10)

TL; DR

如果您想提供单个图像,最好的选择是系统按钮,该按钮可自动使图像处于禁用和突出显示的状态。

如果您想要更多地控制图像,您应该使用自定义按钮并提供最多4张图像。

这非常令人困惑,因为有许多属性会影响按钮的外观:

  • buttonType(2):让我们坚持使用系统或自定义。还有更多可供选择。
  • isSelected(2)
  • isHighlighted(2)
  • isEnabled(2)
  • adjustsImageWhenHighlighted(2)
  • adjustsImageWhenDisabled(2)
  • setImage(_,for :)(4)

即使只有这些有限数量的属性,按钮也有256(2 ^ 8)种不同的组合。只显示关于所有选项的推理是一项艰巨的任务。

此外,影响按钮外观的其他几个因素超出了本答案的范围:

  • tintColor
  • 将backgroundImage
  • setTitleColor(UIColor?,for:UIControlState)
  • setTitleShadowColor(UIColor?,for:UIControlState)
  • reversesTitleShadowWhenHighlighted:Bool
  • setBackgroundImage(UIImage?,for:UIControlState)
  • showsTouchWhenHighlighted
  • setAttributedTitle(NSAttributedString ?, for:UIControlState)

假设我们只注意上面列出的属性,这里有256种可能性中的64种:

enter image description here

我用这些作为图像:

enter image description here

关于命名的一些注意事项:

  • “系统”和“自定义”指的是buttonType。
  • “1 image”表示只为正常状态(红色)定义了一个图像。
  • “4张图像”表示为每个正常(红色),高亮(橙色),选定(绿色)和禁用(紫色)状态定义了图像。
  • ID表示adjustsImageWhenHighlighted=trueadjustsImageWhenDisabled=true
  • id表示adjustsImageWhenHighlighted=falseadjustsImageWhenDisabled=false
  • seh表示isSelected=false isEnabled=false isHighlighted=false
  • SEH表示isSelected=true isEnabled=true isHighlighted=true
  • 任何其他组合遵循相同的模式。例如。 sEh表示isSelected=false isEnabled=true isHighlighted=false

一些观察结果:

  • 在所有8种情况下,前两行始终相同。这意味着当isEnabled = false时,将忽略突出显示的状态。这很有道理。
  • Se状态始终回退到正常图像。它不使用S状态的阴影。
  • 系统按钮遵循标题,选定指标和图像中的tintColor(如果它是模板图像)。 (没有图示。)
  • 自定义按钮仅在图像中尊重tintColor(如果它是模板图像)。 (没有图示。)
  • 对于处于非选定状态的系统按钮,
  • adjustsImageWhenHighlighted=false似乎被忽略了!
  • 使用UIButton()初始化按钮时,默认buttonTypecustom
  • 虽然您可以在故事板中自定义选定,启用和突出显示的状态,但故事板预览不准确。您必须运行您的应用程序以查看状态的实际描述。
  • 如果你是UIButton的子类,那你就是forced to use the custom type
  • 在测试时,我注意到如果按钮图像的尺寸很小(例如28x28),则点击图像不会显示突出显示的状态。相反,你需要点击并按住,然后拖动图像的框架,然后你可以再次将手指移到按钮上。