2

我刚刚开始使用 Watch 开发和 SwiftUI,并认为我会从一个简单的登录屏幕开始。我做了两个不同风格的按钮。奇怪的是我的按钮对它们有一个奇怪的红色内部视图,我不知道为什么。

struct ContentView : View
{
    var body: some View
    {
        VStack
        {
            Button( "Login")
            {            
            }
            .accentColor( .white)
            .frame( idealHeight:50.0)
            .padding( [.leading, .trailing], 10.0)
            .background( Color.red)
            .cornerRadius( 5.0)

            Button( "Sign Up")
            {
            }
            .accentColor( .red)
            .frame( idealHeight:50.0)
            .padding( [.leading, .trailing], 10.0)
            .background( Color.white)
            .cornerRadius( 5.0)
        }
    }
}

手表模拟器截图

有人可以告诉我这里发生了什么吗?

另外,如果有人有 1500 的声誉,他们可以创建 WatchOS6 标签吗?

更新:这在 iPhone 上比在 Watch 上效果更好,按钮在两种设备上的工作方式似乎不同。正如@MarkT 所指出的,您需要从简单的按钮样式开始。问题在于它会阻止您使用自己的按钮样式。

4

4 回答 4

6

您只是在“默认”按钮后面定义一个背景,这就是它看起来如此连线的原因。

将按钮样式更改为“普通”并将角半径应用于背景会有所帮助。当然,您必须通过使用填充来调整背景大小...

       Button( "Login")
            {
            }
            .buttonStyle(PlainButtonStyle())
            .padding(.horizontal, 60)
            .padding(.vertical, 10)
            .background(
                   Color.red
                      .cornerRadius( 5.0))
                

更新:正如 d4Rk 中提到的,我们必须使用 PlainButtonStyle()

于 2019-07-27T09:32:48.030 回答
2

这对我有用

HStack {
        Button("Login")
            {
            }
        .buttonStyle(BorderedButtonStyle(tint: .clear))
        .foregroundColor(.white)
    }
    .background(Color.red)
    .cornerRadius(5)

在此处输入图像描述

如果它在列表中也试试这个

.listRowPlatterColor(Color.clear)
于 2020-10-08T03:24:43.597 回答
1

我相信这是使用accentColor为按钮定义文本颜色的结果。

您可以用它代替foregroundColor并获得相同的文本颜色,但希望没有您当前遇到的奇怪图案。

通过更改,您的代码将如下所示:

struct ContentView : View
{
    var body: some View
    {
        VStack
        {
            Button( "Login")
            {            
            }
            .foregroundColor( .white)
            .frame( idealHeight:50.0)
            .padding( [.leading, .trailing], 10.0)
            .background( Color.red)
            .cornerRadius( 5.0)

            Button( "Sign Up")
            {
            }
            .foregroundColor( .red)
            .frame( idealHeight:50.0)
            .padding( [.leading, .trailing], 10.0)
            .background( Color.white)
            .cornerRadius( 5.0)
        }
    }
}

不幸的是,这并不能完全解决问题。正如你所看到的,我们从这里开始:

之前的内部背景

对此:

后的内部背景

这并不理想。

于 2019-07-27T09:18:50.153 回答
0

根据此文档,您应该将半径设置为 22 点(或 9 用于滚动视图)

于 2020-07-11T15:23:32.147 回答