首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >`.background`在SwiftUI中的`.background()修饰符中出错

`.background`在SwiftUI中的`.background()修饰符中出错
EN

Stack Overflow用户
提问于 2022-05-11 12:07:03
回答 2查看 198关注 0票数 0

我正在尝试创建一个ButtonStyle。我想让背景颜色是buttonBackgroundHover颜色,它已经在Assets.xcassets中创建,而其他时间则保留默认的背景色(与窗口的背景色相同)。所以我尝试了下面的代码,但是Xcode说了一个错误:Member 'background(ignoresSafeAreaEdges:)' expects argument of type 'Color'

代码语言:javascript
复制
struct PlayerButton: ButtonStyle {

    @State private var isOnHover: Bool = false

    func makeBody(configuration: Configuration) -> some View {
        configuration.label
            .background(isOnHover ? Color("buttonBackgroundHover") : .background)
    }
}

但是,如果我用.background(isOnHover ? Color("buttonBackgroundHover") : .background)替换.background(.background),这是没有争议的。我想知道这有什么问题,我如何解决这个问题。我很感谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-05-11 13:01:16

background方法声明如下:

代码语言:javascript
复制
func background<S>(_ style: S, ignoresSafeAreaEdges edges: Edge.Set = .all) -> some View where S : ShapeStyle

注意,它采用的参数类型是S,其中是S : ShapeStyle。当你做.background(.red).background(.background)时,S分别是ColorBackgroundStyle

但是,当您通过时:

代码语言:javascript
复制
isOnHover ? Color("buttonBackgroundHover") : .background

没有一种类型的S可以工作。您希望SColorBackgroundStyle,但是上面表达式的类型只能是其中的一种类型。编译器看到,由于Color("buttonBackgroundHover")Color类型,所以它错误地认为您希望第三个操作数.background也是Color类型。但是没有像Color.background这样的属性,但是由于Color是一个视图,所以它也有一个background方法,这就是.background解析的目的。它需要一个Color参数,因为您正在调用一个没有实例(Color.background)的实例方法。

无论如何,ShapeStyle - AnyShapeStyle有一个类型的橡皮擦.应用此方法可以使条件表达式的两个分支都具有相同的类型:

代码语言:javascript
复制
.background(isOnHover ? AnyShapeStyle(Color("buttonBackgroundHover")) : AnyShapeStyle(.background))
票数 2
EN

Stack Overflow用户

发布于 2022-05-11 12:18:46

没有颜色Color.background -它试图应用相同的.background()修饰符,但在三元操作符中有颜色第一,所以类型冲突-错误。

我想这是意料之中的

代码语言:javascript
复制
.background(isOnHover ? Color("buttonBackgroundHover") : 
                        Color(uiColor: UIColor.systemBackground))  // << this !!
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72200791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档