首页 > 其他分享 >SwiftUI 使用contentShape()控制点击区域

SwiftUI 使用contentShape()控制点击区域

时间:2023-05-30 16:44:30浏览次数:42  
标签:contentShape VStack 点击 区域 SwiftUI background View

当我们向一个view添加TapGesture时,就会发现“有内容”的区域是可以点击的。“有内容”指的是有图片、文字、背景颜色的区域。而空白区域,是不能触发点击回调的。
比如:

struct ContentView: View {
    var body: some View {
        VStack(spacing: 124) {
            Image(systemName: "globe")
                .imageScale(.large)
                .foregroundColor(.accentColor)
            Text("Hello, world!")
        }
        .frame(maxWidth: .infinity)
        .background(Color.red)
        .onTapGesture {
            print("tapped!!!")
        }
    }
}


整个红色区域都可以点击。

当把 .background(Color.red) 去除时,发现只有图标和文字能点击。

struct ContentView: View {
    var body: some View {
        VStack(spacing: 124) {
            Image(systemName: "globe")
                .imageScale(.large)
                .foregroundColor(.accentColor)
            Text("Hello, world!")
        }
        .frame(maxWidth: .infinity)
        //.background(Color.red)
        .onTapGesture {
            print("tapped!!!")
        }
    }
}

所以,我们得明确告诉view实际的内容区域,用 .contentShape()修饰:

struct ContentView: View {
    var body: some View {
        VStack(spacing: 124) {
            Image(systemName: "globe")
                .imageScale(.large)
                .foregroundColor(.accentColor)
            Text("Hello, world!")
        }
        .frame(maxWidth: .infinity)
        .contentShape(Rectangle()) // 这里!
        .onTapGesture {
            print("tapped!!!")
        }
    }
}

现在整个VStack(即使是其中的空白区域)都能点击。


对于上面的案例,你也可以为VStack添加一个白色的background,但是有“副作用”,比如系统进入深色模式时,你要想办法让其跟上变化。所以我更倾向于选择使用contentShape,透明、没有“副作用”。

标签:contentShape,VStack,点击,区域,SwiftUI,background,View
From: https://www.cnblogs.com/ZJT7098/p/17443494.html

相关文章

  • js 轮播图中点击小圆圈图片跳到指定图片
    html代码(部分)<divclass="w"><divclass="main"><!--焦点图模块--><divclass="focusfl"><ahref="javascript:;"class="arrow-l"><</a>......
  • idea项目设置鼠标右键点击文件夹通过IDEA打开
    每次打开idea项目是每次都要打开idea再手动选择项目,直接设置成右键打开会很方便。效果图:首先win+R输入regedit打开注册表打开注册表后找到如下路径:计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell右键->新建->项(k),命名为IDEA3. 在IDEA里,新建字符串值,起名......
  • idea项目设置鼠标右键点击文件夹通过IDEA打开
    每次打开idea项目是每次都要打开idea再手动选择项目,直接设置成右键打开会很方便。效果图:首先win+R输入regedit打开注册表打开注册表后找到如下路径:计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell右键->新建->项(k),命名为IDEA3. 在IDEA里,新建字符串值,起名......
  • idea项目设置鼠标右键点击文件夹通过IDEA打开
    每次打开idea项目是每次都要打开idea再手动选择项目,直接设置成右键打开会很方便。效果图: 1.首先win+R输入regedit打开注册表 2.打开注册表后找到如下路径:计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell 右键->新建->项(k),命名为IDEA 3.......
  • idea项目设置鼠标右键点击文件夹通过IDEA打开
    每次打开idea项目是每次都要打开idea再手动选择项目,直接设置成右键打开会很方便。效果图: 1.首先win+R输入regedit打开注册表 2.打开注册表后找到如下路径:计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell 右键->新建->项(k),命名为IDEA 3.......
  • Echarts 阴影点击事件获得当前柱状图的索引值方法
    Echarts阴影点击事件获得当前柱状图的索引值方法//什么在option外面的变量varclickIndex;option={//配置信息tooltip:{//提示框//提示触发类型:不触发trigger:'none',},//formatter回调函数,formatter:val=>{......
  • 不要点击那个ZIP文件! 钓鱼者利用.ZIP域名来欺骗受害者
    一种名为"浏览器中的文件存档器"的新的网络钓鱼技术可以被利用,当受害者访问一个.ZIP域时,在网络浏览器中"模拟"一个文件存档器软件。"安全研究员mr.d0x上周披露:"通过这种网络钓鱼攻击,你在浏览器中模拟一个文件存档软件(例如WinRAR),并使用一个.zip域名,使其看起来更合法。简而言之,威......
  • 前端树形结构图treeShapeStruct,可拖拽移动,点击展开收缩,无限添加子集
    快速实现树形结构图,可拖拽移动,点击展开收缩,无限添加子集;下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=12650效果图如下:  实现代码如下:#treeShapeStruct树形结构图,可拖拽移动,点击展开收缩,无限添加子集使用方法####HTML代码部分```......
  • 前端树形结构图组件 tree组件,可拖拽移动,点击展开收缩,无限添加子集
    快速实现树形结构图组件tree组件,可拖拽移动,点击展开收缩,无限添加子集;下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=12650效果图如下:  实现代码如下:#treeShapeStruct树形结构图,可拖拽移动,点击展开收缩,无限添加子集使用方法####HTM......
  • vue3 后台返回数据没有返回字段是true和false 值的时候,循环数组,点击单个元素单个元素
    最原始的写法<template><div><divv-for="(item,index)initems":key="item.id":class="{active:item.active}"@click="handleClick(item)">{{item.text}}div>div>但是不是所有的后端都会返回字段的值是true和false ......