swift 和 swift UI 中的多行字符串使用绑定对象

Multiline string in swift and swift UI using binding object

提问人:Satyam 提问时间:6/23/2023 更新时间:6/23/2023 访问量:35

问:

我正在创建一个自定义横幅或错误视图,如附加图像所示。 下面的代码是我的观点:

struct BannerModifier: ViewModifier {
@Binding var data: NotificationBannerData
@Binding var show: Bool

func body(content: Content) -> some View {
    ZStack {
        content
        if show {
            VStack {
                HStack {
                    VStack(alignment: .leading, spacing: 2) {
                        Text(data.title)
                            .bold()
                        HStack {
                            Image(data.iconName)
                            Text(data.detail)
                                .modifier(LinkText13Modifier())
                        }.padding(.bottom, 10)
                    }
                    Spacer()
                }
                .padding(12)
                .background(data.type.tintColor)
                .cornerRadius(8)
                Spacer()
            }
            .padding()
            .animation(.easeInOut)
            .transition(AnyTransition.move(edge: .top).combined(with: .opacity))
            .onTapGesture {
                withAnimation {
                    self.show = false
                }
            }.onAppear(perform: {
                DispatchQueue.main.asyncAfter(deadline: .now() + 5) {
                    withAnimation {
                        self.show = false
                    }
                }
            })
        }
    }
}

}

以下是我的预览:

struct Banner_Previews: PreviewProvider {
static var previews: some View {
    let obj = Binding<NotificationBannerData>(get: { NotificationBannerData(title: "Title", detail: """
Detailed message that has to be displayed
when we have multiple lines to be displayed in \
the banner
""", type: .error, iconName: "icon_red") }, set: { _ in })
    
    let showVal = Binding<Bool> (get: { true }, set: { _ in })
    // Pass the binding object to the view
    HStack {
        Text("Show banner")
    }
    .banner(data: obj, show: showVal)
}

}

问题是当我有多行字符串时,它不能正确显示。它显示为 3 行,预期是有一个带换行的字符串。

enter image description here

swift 字符串 swiftui

评论

2赞 Joakim Danielson 6/23/2023
一个可重现的例子呢?当我在第一行之后(在“显示”之后)添加 \ 时,这对我来说效果很好,但没有使用 Binding,无论如何这似乎没有必要,以及那个秘密修饰符。
0赞 lorem ipsum 6/23/2023
除非您正在积极使用 ,否则不要使用 。 根据定义,是双向连接BindingsetBinding
0赞 Guillermo Jiménez 6/23/2023
只是为了防止多行.lineLimit(1)
0赞 Satyam 6/23/2023
@JoakimDanielson我将删除绑定。由于我必须在显示某些错误或警告时将其显示为叠加层,因此我正在使用修饰符。有没有更好的方法仅在我必须显示错误/警告时才显示它?

答: 暂无答案