SwiftUI Spacer() onTapGesture 无法触发

文章讲述了在SwiftUI中,如何避免点击黑色区域不触发`print`的问题,通过将onTapGesture替换为Button来实现。同时提到了一款应用——熊猫小账本,它利用了这些UI技巧进行记账管理。

问题:点击这个黑色区域不会 print,黑色区域看上去刚好是 Spacer() 占据的区域在这里插入图片描述


解决办法:不使用 onTapGesture,用 Button 包裹一下

在这里插入图片描述

Code:

import SwiftUI

struct TestTap: View {
    var body: some View {
        NavigationStack {
            List {
                Section {
                    Button {
                        print("Tap !!!", Date.now)
                        
                    } label: {
                        HStack(spacing: 0) {
                            Image(systemName: "swift")
                                .resizable()
                                .scaledToFit()
                                .frame(width: 66)
                                .foregroundColor(.yellow)
                                .border(.yellow)
                            
                            Text("Swift")
                                .foregroundColor(.green)
                                .border(.green)
                            
                            Spacer()
                            
                            Image(systemName: "checkmark.circle.fill")
                                .font(.title2)
                                .foregroundColor(.blue)
                                .border(.blue)
                        }
                        .border(.red)
                    }
                }
            }
        }
    }
}

struct TestTap_Previews: PreviewProvider {
    static var previews: some View {
        TestTap()
    }
}


推荐一下刚上线的 App 熊猫小账本,里面有用到这篇博客讲的内容

熊猫小账本 一个简洁的记账 App,用于记录日常消费开支收入,使用 iCloud 保存同步数据。

  • 支持备注,自定义时间偶尔忘记记账也没关系。
  • 搜索历史记账,支持分类、金额、备注。
  • 启动时需要面容/指纹验证,保护个人隐私。
  • 支持自定义分类功能,自由添加修改分类。
  • 统计图表,支出收入一目了然。
  • 每天提醒记账,不会有其他推送。
  • 桌面锁屏小组件开发中。。。

点击去看看 👀


喜欢或对你有帮助,点个赞吧,自己先点个嘿嘿。
有错误或者疑问还请评论指出。
我的个人网站 点击访问 hongweizhu.com

END

### SwiftUI 面试常见问题及答案 #### 什么是 SwiftUISwiftUI 是苹果推出的一种声明式用户界面框架,允许开发者通过简单的语法构建复杂的应用程序界面。它简化了 UI 开发流程并提供了跨平台的支持[^1]。 #### SwiftUI 和 UIKit 的主要区别是什么? UIKit 是基于命令式的开发模式,而 SwiftUI 则采用声明式的方式定义 UI。这意味着在 SwiftUI 中,开发者只需描述应用的外观和行为,而不是手动管理视图层次结构和更新逻辑。此外,SwiftUI 提供内置的状态管理和动画支持,减少了大量样板代码。 #### 如何在 SwiftUI 中处理状态管理? SwiftUI 提供了几种工具用于状态管理: - **@State**:适用于单个视图内部的小范围状态变化。 - **@Binding**:用于父子视图之间的双向数据绑定。 - **@ObservedObject / @EnvironmentObject**:适合多视图共享较大的模型对象。 这些特性使得状态同步变得更加直观和高效。 #### SwiftUI 支持哪些布局方式? SwiftUI 提供灵活的布局选项,包括但不限于 HStack、VStack 和 ZStack 来排列子视图;Spacer 可以自动填充剩余空间;GeometryReader 能够获取父容器尺寸从而动态调整内容大小。 #### 怎样实现导航功能? 利用 NavigationView 结合 NavigationLink 实现页面跳转。如果需要传递参数,则可以通过初始化器或者环境变量完成数据传输。 ```swift struct ContentView: View { var body: some View { NavigationView { VStack { NavigationLink(destination: DetailView()) { Text("Go to detail") } }.navigationTitle("Home") } } } ``` #### 动画是如何工作的? 调用 `.animation()` 修改器即可轻松添加过渡效果到任何可变属性上。还可以指定具体触发条件以及自定义曲线类型。 ```swift struct AnimatedCircle: View { @State private var isAnimating = false var body: some View { Circle() .frame(width: isAnimating ? 100 : 50, height: isAnimating ? 100 : 50) .onTapGesture { withAnimation(.easeInOut(duration: 2)) { self.isAnimating.toggle() } } } } ``` #### 是否能够兼容旧版本 iOS 设备? 虽然 SwiftUIiOS 13 开始引入,但它并不完全向后兼容更低版本的操作系统。不过借助 Catalyst 或 Mac App Store 渠道分发 macOS 应用时仍有可能覆盖更多受众群体。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值