UIButton系统与颜色,图像,状态等方面的定制?

Sen*_*ful 4 uibutton ios

UIButtonType customsystem.之间有什么区别?诸如adjustsImageWhenHighlighted影响我所提供的图像的财产将如何影响?

如果我只提供一些图像而不提供其他图像会发生什么?

Sen*_*ful 12

TL; DR

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

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


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

  • buttonType(2):让我们坚持使用系统或自定义.还有更多可供选择.
  • 被选中(2)
  • 是突出的(2)
  • isEnabled(2)
  • adjustsImageWhenHighlighted(2)
  • adjustsImageWhenDisabled(2)
  • setImage(_,for :)(4)

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

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

  • tintColor
  • 背景图片
  • setTitleColor(UIColor?,for:UIControlState)
  • setTitleShadowColor(UIColor?,for:UIControlState)
  • reversesTitleShadowWhenHighlighted:Bool
  • setBackgroundImage(UIImage?,for:UIControlState)
  • showsTouchWhenHighlighted
  • setAttributedTitle(NSAttributedString?,for:UIControlState)

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

在此输入图像描述

我用这些作为图像:

在此输入图像描述

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

  • "System"和"Custom"指的是buttonType.
  • "1图像"表示仅为正常状态(红色)定义了单个图像.
  • "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的子类,则不得不使用自定义类型.
  • 在测试时,我注意到如果按钮图像的尺寸很小(例如28x28),则点击图像不会显示突出显示的状态.相反,您需要点按并按住,然后拖动图像的框架外,然后您可以再次将手指移动到按钮上.