SwiftUI自定义macOS 14.6光标修饰器无法稳定工作的问题
自定义NSCursor修饰器兼容macOS 14.6的问题
由于.pointerStyle(.link)修饰器仅支持macOS 15及以上版本,为兼容macOS 14.6,我自定义了一个修饰器模拟该行为,但遇到以下三个问题:
- 鼠标悬停视图时,光标需点击后才更新(已通过print语句确认修饰器代码已执行);
- 点击视图会导致光标重置(因失去悬停状态),但并非首次点击就出现该情况;
- 修饰器内的
onTapGesture(perform:)会阻塞外部设置的onTapGestures(perform:),使用simultaneousGesture(_:)可解决此问题,但需将pointer(_:)修饰器放在外部onTapGesture(perform:)之后。
自定义PointerModifier代码如下:
import SwiftUI struct PointerModifier: ViewModifier { var pointer: NSCursor func body(content: Content) -> some View { content .onTapGesture { DispatchQueue.main.async { let _ = print("TapGesture: Pushing new mouse cursor") pointer.push() } } // Or // .simultaneousGesture(TapGesture().onEnded({ // DispatchQueue.main.async { // let _ = print("TapGesture: Pushing new mouse cursor") // pointer.push() // } // })) .onHover { hover in DispatchQueue.main.async { if hover { let _ = print("Hover: Pushing new mouse cursor") pointer.push() } else { let _ = print("Hover: Popping mouse cursor") NSCursor.pop() } } } } } extension View { func pointer(_ pointer: NSCursor) -> some View { modifier(PointerModifier(pointer: pointer)) } }
内容的提问来源于stack exchange,提问作者dohpaz42
相关产品推荐
相关产品推荐

