MotionLayout 一个坑了一天的问题 visibility不起作用

根本原因 :没有详细看 原文里有解释 我就不解释了
解决办法

在MotionScene动画文件中 把这个id排除一下 增加下面代码

<ConstraintSet android:id="@+id/start">
    <Constraint android:id="@id/viewId">
        <PropertySet
            app:applyMotionScene="false"
            app:visibilityMode="ignore" />
    </Constraint>
</ConstraintSet>

<ConstraintSet android:id="@+id/end">
    <Constraint
        android:id="@id/ft_lwa_toast"
        app:visibilityMode="ignore" />
</ConstraintSet>
<Transition .../>

这位大哥,让我从坑里爬起来了,非常感谢:
我用#优快云#这个app发现了有技术含量的博客,小伙伴们求同去《MotionLayout 中 visibility 无效问题》, 一起来围观吧 https://blog.youkuaiyun.com/qq_30596077/article/details/108846385?utm_source=app&app_version=4.5.0

<think> 根据用户问题,用户想要隐藏表格中的特定单元格(td)。结合之前的引用内容,我们可以通过CSS来实现。以下是几种方法: 1. **使用`display: none;`**:直接隐藏该td,同时表格布局会自动调整,相邻单元格会占据其空间。 2. **使用`visibility: collapse;`**:类似于`display: none;`,但专门针对表格元素,在表格布局中移除该单元格,但保留列宽(注意:浏览器兼容性可能存在问题)。 3. **使用`visibility: hidden;`**:隐藏内容,但保留该td的空间(即隐藏后原来位置会留白)。 另外,用户之前的引用中提到了表格布局和单元格样式,我们可以参考引用[3]中关于`table-layout: fixed`的使用,这有助于在隐藏单元格时保持表格布局稳定。 ### 方法一:使用`display: none;` 这是最直接的方法,但要注意,使用`display: none;`后,该单元格会被完全移除,表格布局会重新调整。 **示例代码:** ```html <style> table { border-collapse: collapse; width: 100%; } td, th { border: 1px solid #ccc; padding: 8px; } /* 隐藏第二个td(假设是第二列) */ td:nth-child(2) { display: none; } </style> <table> <tr> <td>单元格1</td> <td>单元格2(将被隐藏)</td> <td>单元格3</td> </tr> </table> ``` ### 方法二:使用`visibility: collapse;` 这个方法在标准中是为表格元素设计的,但目前浏览器支持并不完全一致(例如,Firefox支持,但Chrome和Edge可能需要测试)。它会移除单元格并重新调整表格布局,同时保持列宽的一致性(如果设置的话)。 **示例代码:** ```css td.hide-cell { visibility: collapse; } ``` ### 方法三:使用`visibility: hidden;` 这个方法会隐藏内容但保留空间,所以单元格的位置还在,只是内容不可见。如果用户希望隐藏内容但保持布局不变,可以使用这种方法。 **示例代码:** ```css td.hide-cell { visibility: hidden; } ``` ### 结合引用[3]的注意事项 引用[3]中提到使用`table-layout: fixed`可以控制表格布局,使得单元格的宽度固定,不会因为内容变化而改变。在隐藏单元格时,使用`table-layout: fixed`可以避免表格布局的跳动。 ### 推荐方法 通常,使用`display: none;`是最常用且兼容性最好的方法,因为它会完全移除该单元格,并且表格布局会重新调整。如果用户希望保留隐藏单元格所占的空间但内容不可见,则使用`visibility: hidden;`。 ### 示例:隐藏特定td 假设我们有一个表格,需要根据条件隐藏某个特定的td(例如,第二行第二列的td),我们可以通过CSS类或者选择器来实现。 **通过类名隐藏:** ```html <style> .hidden-td { display: none; /* 或者使用 visibility: hidden; */ } </style> <table> <tr> <td>内容1</td> <td class="hidden-td">这个td会被隐藏</td> <td>内容3</td> </tr> </table> ``` **通过行和列选择器:** 可以使用`:nth-child`选择器来指定隐藏某一列的所有单元格,或者某一行的特定单元格。 ### 注意事项 - 如果使用`display: none;`,该单元格在表格布局中不再存在,所以其他单元格会填充其位置。 - 如果表格有复杂的结构(如合并单元格),隐藏单元格可能会影响整体布局,需要谨慎使用。 ### 相关问题 §§相关问题§§ 1. CSS中`display: none;`和`visibility: hidden;`有什么区别? 2. 如何动态控制表格中某个单元格的显示和隐藏(使用JavaScript)? 3. 在表格中隐藏整行(tr)和隐藏单个单元格(td)有什么不同? </think> ### 使用HTML和CSS隐藏表格中特定单元格的方法 根据引用内容,以下是几种实现隐藏表格中特定`<td>`的方法(兼容主流浏览器): #### 方法一:使用 `display: none`(推荐) ```css /* 隐藏特定单元格 */ td.hidden-cell { display: none; } ``` ```html <table> <tr> <td>正常显示</td> <td class="hidden-cell">这个单元格会被隐藏</td> <!-- 添加class --> <td>正常显示</td> </tr> </table> ``` **特点**: - 完全从文档流中移除元素 - 不占用任何布局空间 - 支持所有现代浏览器[^1][^2] #### 方法二:使用 `visibility: hidden` ```css td.hidden-cell { visibility: hidden; } ``` **特点**: - 元素保持占据空间(保留空白区域) - 内容不可见但布局保留 - 适合需要保持表格结构的情况[^2] #### 方法三:使用透明度(视觉隐藏) ```css td.hidden-cell { opacity: 0; /* 完全透明 */ pointer-events: none; /* 禁止交互 */ } ``` **特点**: - 元素保留物理空间 - 支持平滑过渡动画 - 可被辅助技术读取 #### 方法四:尺寸归零(特殊场景) ```css td.hidden-cell { width: 0; height: 0; padding: 0; border: 0; overflow: hidden; } ``` **适用场景**: - 需要保持表格列数不变时 - 配合`table-layout: fixed`使用(参考引用[3]) ### 实现关键点 1. **选择器选择**: ```css /* 隐藏第二列所有单元格 */ td:nth-child(2) { display: none } /* 隐藏特定class的单元格 */ .hide-td { visibility: hidden } /* 隐藏包含特定内容的单元格 */ td:contains("敏感信息") { opacity: 0 } ``` 2. **保留表格布局**: ```css table { table-layout: fixed; /* 关键属性(引用[3]) */ width: 100%; } ``` 3. **动态控制**: ```html <!-- 通过JS动态切换 --> <td onclick="this.classList.toggle('hidden-cell')">点击隐藏</td> ``` ### 注意事项 1. 使用`display: none`会破坏表格布局,建议配合`table-layout: fixed` 2. 隐藏单元格可能导致行列不对齐,需测试多浏览器 3. 屏幕阅读器仍可能读取隐藏内容,如需完全隐藏应使用`aria-hidden="true"` > 示例:隐藏包含敏感信息的单元格 > ```html > <style> > table { table-layout: fixed } > .secret { display: none } > </style> > > <table> > <tr> > <td>公开数据</td> > <td class="secret">机密数据</td> > </tr> > </table> > ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值