ios 如何使UIButton.Configuration高亮显示外观与系统按钮匹配

knpiaxh1  于 12个月前  发布在  iOS
关注(0)|答案(1)|浏览(137)

我正在更新我的应用程序,并将UIButton s更新为使用UIButton.Configuration。我将系统按钮切换为默认的普通配置样式,但惊讶地发现按钮高亮显示状态几乎不明显。当你点击传统的系统按钮时,它的alpha值会降低很多,表明它正在被按下,所以很容易知道当你释放触摸这个按钮将被触发。不幸的是,与平原按钮配置,高亮状态很难看到,因为外观几乎没有变化。有没有办法让这个高亮的行为像所有其他按钮,如UIBarButtonItem s?

let oldButton = UIButton(type: .system)
oldButton.setTitle("System Button", for: .normal)
oldButton.frame = CGRect(x: 50, y: 100, width: 150, height: 30)
view.addSubview(oldButton)

let newButton = UIButton(configuration: {
    var config = UIButton.Configuration.plain()
    config.title = "Plain Button"
    return config
}())
newButton.frame = CGRect(x: 50, y: 150, width: 150, height: 30)
view.addSubview(newButton)

字符串
这是系统按钮的突出显示状态:


的数据
这是普通按钮的突出显示状态:


kcwpcxri

kcwpcxri1#

这就是titleTextAttributesTransformer的作用。使用它,您可以向运行时描述您希望在按钮的特定状态下(例如突出显示时)执行的操作。示例:

let newButton = UIButton(configuration: {
    var config = UIButton.Configuration.plain()
    config.title = "Plain Button"
    return config
}())
newButton.configuration?.titleTextAttributesTransformer = .init { 
    [unowned newButton] container in
    var newContainer = AttributeContainer()
    guard let baseColor = container.uiKit.foregroundColor else {
        return newContainer
    }
    switch newButton.state {
    case .highlighted:
        newContainer.foregroundColor = baseColor.withAlphaComponent(0.3)
    default:
        newContainer.foregroundColor = baseColor
    }
    return container.merging(newContainer)
}

字符串
您可以随意调整“魔法数字”0.3来满足您的口味。
(This可能看起来工作量很大,但是如果你定义了一个基本按钮并从它派生出你的应用的所有其他按钮,你只需要做一次。在我们的应用中,我们已经定义了一个从基本按钮派生出的整个按钮样式级联。)

相关问题