SwiftUI预览:如果Custom ButtonStyle在其他文件中,则预览失败

时间:2020-06-19 02:28:34

标签: xcode swiftui

我的自定义ButtonStyle看起来像这样。

struct DefaultButtonStyle: ButtonStyle {
    func makeBody(configuration: Configuration) -> some View {
        configuration.label
            .padding()
            .frame(minWidth: 0, maxWidth: .infinity)
            .foregroundColor(.white)
            .background(RoundedRectangle(cornerRadius: 4)
                .fill(configuration.isPressed ? Color.black : Color.green)
            )
    }
}

使用自定义按钮样式的示例实现。

Button(action: { self.viewModel.login() }) {
  Text("Sign In")
    .font(.headline)
}
.buttonStyle(DefaultButtonStyle())
.frame(minWidth: 0, maxWidth: 380)
.padding([.leading, .trailing], 27.5)

我的预览代码。

#if DEBUG
struct LoginView_Previews: PreviewProvider {
    static var previews: some View {
        LoginView (viewModel: LoginViewModel()).environment(\.verticalSizeClass, .regular)
    }
}
#endif

当我将自定义样式放入与视图相同的文件中时。预览还可以。 但是,当我将自定义样式移到它自己的文件中时(目的是在整个应用中重用它)。预览抛出错误。

Compiling failed: type 'Any' has no member 'leading'

是否需要在LoginView_Previews中添加一些内容才能使其在预览中加载?我在做什么错了?

1 个答案:

答案 0 :(得分:0)

我想这是由于与内置DefaultButtonStyle冲突造成的,所以以不同的方式命名您的名字,例如

struct MyDefaultButtonStyle: ButtonStyle {
    func makeBody(configuration: Configuration) -> some View {
    // .. other code

...

Button(action: { self.viewModel.login() }) {
  Text("Sign In")
    .font(.headline)
}
.buttonStyle(MyDefaultButtonStyle())