如何让UIButton.Configuration高亮外观与系统按钮一致

问题描述 投票:0回答:1

我正在对我的应用程序进行现代化改造并更新

UIButton
以使用
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)

这是系统按钮的高亮状态:

这是普通按钮的高亮状态:

ios uikit uibutton
1个回答
0
投票

这就是

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)
    }
© www.soinside.com 2019 - 2024. All rights reserved.