如何:使用条件自定义背景视图作为背景修饰符?

Posted

技术标签:

【中文标题】如何:使用条件自定义背景视图作为背景修饰符?【英文标题】:How to: Use conditional custom background views for background modifier? 【发布时间】:2020-06-18 11:19:25 【问题描述】:

通常,如何使用三元运算符对修饰符进行有条件的更改是很简单的。但是当我尝试在背景修饰符的两个自定义视图之间切换时,我得到了这个错误。如果您不是这种情况,例如直接将颜色指定为备用视图。

错误:结果值在 '? :' 表达式有不匹配的类型 'BackgroundView1' 和 'BackgroundView2'

import SwiftUI

struct TestView: View 

@State var buttonPressed = false

var body: some View 

    Button(action: self.buttonPressed.toggle()) 

        Image(systemName: "circle.fill")
            .background(self.buttonPressed ? BackgroundView1() : BackgroundView2()) // Error
//                .background(buttonPressed ? Color.red : Color.green)
    




struct BackgroundView1: View 

var body: some View 

    Color.red

    


struct BackgroundView2: View 

var body: some View 

    Color.green




struct TestView_Previews: PreviewProvider 
static var previews: some View 
    TestView()


【问题讨论】:

【参考方案1】:

视图必须是一种类型,这是可能的解决方案

Image(systemName: "circle.fill")
    .background(Group 
       if self.buttonPressed  BackgroundView1() 
         else  BackgroundView2() 
    ) 

替代方案是,如果视图很简单(否则可能是性能问题),

    Image(systemName: "circle.fill")
        .background(self.buttonPressed ? AnyView(BackgroundView1()) : AnyView(BackgroundView2()))

【讨论】:

以上是关于如何:使用条件自定义背景视图作为背景修饰符?的主要内容,如果未能解决你的问题,请参考以下文章

如何在自定义视图中创建更改属性的修饰符

iOS 自定义键盘模糊视图作为背景

在 SwiftUI 的自定义视图中访问图像的修饰符

Swift,自定义单元格颜色不适用于披露指示符后面

SwiftUI:自定义视图修饰符不符合 ViewModifier?

使自定义 SwiftUI 视图适应内置修饰符