我正在尝试更改 tvOS 上 SwiftUI Button的颜色。

修改background几乎可以工作,除了您可以看到底层UIButton实际上在背景顶部使用圆形的半透明图像。 这会导致矩形背景位于圆形图像之外的角落处的颜色不同。

在此处输入图片说明

添加.padding强调了这个问题:

在此处输入图片说明

struct ContentView: View {

    @State
    var selected = false

    var body: some View {

        Button(action: {
            self.selected.toggle()
        }) {
               Text($selected.wrappedValue ? "On":"Off")
                .foregroundColor(.white)
            }.padding(.all)
             .background(self.selected ? Color.green : Color.blue)
        }
    }
}

一个相关的问题是更改“焦点”视图的颜色,因为我怀疑这与按钮本身的视图相同,改变了赢的大小和颜色。

带有UIButton tvOS 中的典型技术是更改按钮图像,但似乎没有任何方法可以访问底层UIButton的图像。

#1楼 票数:5 已采纳

同样,我只在 iOS 上检查过它,但这应该会有所帮助:

struct ContentView: View {

    @State var selected = false

    var body: some View {

        Button(action: { self.selected.toggle() }) {
            Text($selected.wrappedValue ? "On":"Off")
                .foregroundColor(.white)
        }   .padding(.all)
            .background(RoundedRectangle(cornerRadius: 5.0)
                            .fill(self.selected ? Color.green : Color.blue))

    }
}

您可以将任何视图传递给 .background() 修饰符,因此您可能还想尝试在其中放置一个 Image()。

#2楼 票数:2

这段代码在 iOS 上似乎运行良好,但正如您所展示的,在 tvOS 中,底层 UIButton 是可见的。 我不确定如何获取底层按钮或其图像,但似乎您现在可以破解它(直到 Apple 修复该问题或提供获取该按钮的方法。)

首先,将内边距向上移动以修改文本,使其正确影响底层按钮。

其次,(这是 hack)在背景修改器之后用一个cornerRadius 剪辑视图。 只要半径等于或大于底层按钮的半径,它就会剪掉多余的背景。 (当然,您看到的不是绿色,而是绿色叠加在半透明按钮图像的灰色上所产生的颜色。至少在 Xcode 中是这样显示的。)

struct ContentView: View {

    @State var selected = false

    var body: some View {

        Button(action: {
            self.selected.toggle()
        }) {
            Text($selected.wrappedValue ? "On":"Off")
                .foregroundColor(.white)
                .padding(.all)
        }
        .background(self.selected ? Color.green : Color.blue)
        .cornerRadius(5)
    }
}

#3楼 票数:-1

尝试:

button.setBackgroundImage(UIImage.imageWithColor(.lightGray), for: .normal)

您可以将其设置为.focused.highlighted

  ask by Paulw11 translate from so

未解决问题?本站智能推荐:

1回复

自定义按钮样式 (SwiftUI) tvOS

所以我有一个自定义按钮类(这样我就可以删除所有徽标背后的背景。) 但是现在当用户将鼠标悬停在按钮上时缩放不起作用/激活 - 这意味着他们不知道他们在哪个按钮上。 我想知道如何在遥控器上方或按钮上添加增加按钮大小(宽度和高度)的功能? 和按钮代码 我已经确定我可以使用这个 但它不会缩放
1回复

SwiftUI:检测 tvOS 上 NavigationView 中的选择更改

我正在为 tvOS 构建一个 SwiftUI 应用程序,目前正在尝试实现 UI。 我在底部有 NavigationView,在顶部有标签,我希望标签显示当前处于焦点的 NavigationLink。 这是我的代码: . 但是,当我更改选择并且不显示任何值时,标签值不会更改: 任何想法
1回复

如何使用 SwiftUI 在 tvOS 中垂直滚动?

我不知道这是 SwiftUI 特定的问题,但我无法在 tvOS 中垂直滚动。 这只是显示项目的简单List 。 有 50 多个项目,但我可以看到其中大约 10 个。 我尝试了option + arrow keys ,也尝试了通过按住option键来使用模拟器的遥控器。 他们都没有工作。 有没有
1回复

带有 SwiftUI 的 tvOS 上的 NavigationLink 按钮不起作用

我正在尝试使用 SwiftUI 在 Apple TV 上构建一个简单的导航 UI: 据我所知,我需要将NavigationLink或NavigationLink与Button结合使用。 我尝试了几种实现,但都没有奏效: 前两个不能用 Magic Remote 选择:它们不会变得专注。 当
1回复

SwiftUI:未触发自定义按钮的操作

使用 SwiftUI 在 tvOS 上测试一些东西。 当我向按钮添加自定义样式时,按钮的“动作”没有被触发。 在这个例子中,我想打印“按下”,但添加函数也不起作用。 是否也可以实现自定义操作触发器,或者我做错了什么? 为了澄清为什么我想要一个自定义按钮样式。 当我不使用任何按钮样式时,“动作”
2回复

NavigationLink 内的 tvOS 按钮不起作用

我已经使用 swift 和 swiftui 构建了一个 iOS 应用程序,现在我正在开发该应用程序的 tvOS 版本。 但是,我有几个问题。 其中一个问题仍未解决: tvOS Textfield Transparent Background我正在创建一个登录页面,但我意识到 NavigationLi
2回复

SwiftUI - TabView 中的 OnExitCommand

我最近一直在尝试制作 tvOS 应用程序,但遇到了以下相当烦人的问题。 我无法在 TabView 中使用导航,并且仍然有删除菜单按钮将我带回以前的状态。 我的问题是:有什么方法可以让菜单按钮在不完全关闭应用程序的情况下返回层次结构中的上一个视图?
1回复

tvOS 如果用户点击播放/暂停

只是想弄清楚在 SwiftUI 中我如何知道用户是否点击了播放/暂停按钮? 如果用户单击暂停/播放按钮,我需要我的媒体播放器暂停或播放。 我见过这样的例子 但是这不起作用 - 实际上该应用程序不会运行。 还看到了这个例子 但是我不能把它放在我的 MusicPlayer.swift