SwiftUI 在 Mac 下 toolBar 上的内容可以拖动的设置

本文介绍了一个在Mac应用中使用SwiftUI时遇到的问题,即工具栏拖动会同时移动窗口,导致与视图拖动操作冲突。作者提供了一个解决方案,即在鼠标悬停在需要拖动的视图上时禁用窗口拖动,鼠标移开后恢复。代码示例展示了如何实现这一功能,适合设计师和初学者学习SwiftUI。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
Mac 下的 toolBar 当拖动的时候也会拖动窗口,这个时候如果我们放在 toolBar 上的 View 想拖动的时候就会产生冲突了,找了下没找到只是禁止拖动 toolBar 的操作,找了个折中的办法,当鼠标移动到要拖动的 View 上的时候,禁止拖动窗口,鼠标移开的时候在恢复。

var body: some View {
        Image(tool.type.icon)
            .resizable()
            .aspectRatio(contentMode: .fit)
            .frame(width: 20, height: 20)
            .padding(.vertical, 4)
            .padding(.horizontal, 10)
            .background(Color("border").opacity(hover ? 0.4 : 0))
            .clipShape(RoundedRectangle(cornerRadius: 8, style: .continuous))
            .onDrag { () -> NSItemProvider in
                let item = NSItemProvider(object: tool)
                item.suggestedName = tool.type.icon
                return item
            }
            .padding(.horizontal, 6)
            .onHover { hover in
                let window = NSApplication.shared.windows.first!
                window.isMovable = !hover
                // 下面这个在这里没什么用,但是你可以在用到的地方设置拖动 View 移动窗口。
                window.isMovableByWindowBackground = true
                
                self.hover = hover
            }
    }

更多内容可以查看应用 SwiftUI For Beginners,一个产品设计师从自学的 SwiftUI 开发的各个过程给你讲解 SwiftUI 内容,Apple 应用商店搜索 SwiftUI For Beginners 下载。

  • 适合设计师人群,互联网从业者或者想自己做个应用的人群;
  • 不适合技术人群,应用完全是从一个 0 基础的角度去讲解各个阶段需要的知识,对于技术人群过于简单;
  • 内容讲解➕ 直接代码效果预览,学习过程更加直观;
  • iPhone, iPad 和 Mac 全平台支持,Apple Watch 和 TV 应用即将上线。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值