# 滑动之后按钮不能点击
添加了滑动功能之后,这些按钮都不让点击了。
![](https://img.kancloud.cn/cb/2c/cb2c5af4e5c7c468b11f5dd3291fce80_644x538.png)
解决办法:在开启滑动功能时,关闭获取所有事件的功能:
![](https://img.kancloud.cn/81/b7/81b72f46b5a65c907a95aa018c2b0619_1436x1188.png)
# 不同屏幕尺寸适配
布局时要注意,有些写死的坐标位置 ,在不同的屏幕尺寸上位置会不同。所以布局时尽量不要写死一定数字:
![](https://img.kancloud.cn/45/51/4551ca2366fdd8e95865b61c9973b86d_2268x434.png)
解决办法:
用一个 View 套起来,然后布局:
![](https://img.kancloud.cn/e0/aa/e0aa9c7f5cd54184c69c9b85220a611d_1344x1128.png)
# 解决IOS手机带刘海的问题
官方提供了一个组件可以解决 IOS 手机上带刘海时被盖住的问题:
![](https://img.kancloud.cn/b9/ee/b9ee1686595099454941c9e7027d43a5_730x230.png)
解决办法:
![](https://img.kancloud.cn/53/a6/53a66ad2c41e3f4f4b50154dc3313ae1_1670x1334.png)
![](https://img.kancloud.cn/d2/40/d240cda25a6c18b6361926f987654689_724x236.png)
# 解决首页评论嵌套 FlatList 组件的问题
在 RN 中如果一个 FlatList 组件中嵌套了另一个 FlatList 会导致内部的 FlatList 无法滚动加载,比如首页的评论就无法滚动:
![](https://img.kancloud.cn/5d/e2/5de2c0ac2e671efafd1975dc120e8cb6_962x1360.png)
嵌套 使用导航失效:
![](https://img.kancloud.cn/39/eb/39ebe27fa336d7fbce2c7d59954be483_2008x1106.png)
解决思路:把内层的 FlatList 拿出来放到首页的最外层组件中写。
在首页最外层(pages/main/Video.js) 中添加一个评论的框,把评论放到这里就互不影响了,都可以滚动了
![](https://img.kancloud.cn/24/22/2422f22900d29fa6abdf937cad5bf17b_1952x1108.png)
问题:原来每个视频中自带一个评论列表,显示自己的评论,而现在这样改完之后,所有视频就要共用同一个评论列表,这就要注意评论数据传递的问题了,每当切换视频时,同时要切换评论框中的评论数据。
## 先封装评论条目组件
把原来每个评论的组件单独写到一个文件中:
![](https://img.kancloud.cn/b4/d2/b4d21a8bb2d2003c8bf6956856ea56b4_1638x1422.png)
## 在首页评论框中使用 FlatList 组件来制作评论条目的列表
1. 先引入组件
~~~
import CommentItem from '../../../components/comment/CommentItem';
~~~
2. 制作列表
![](https://img.kancloud.cn/57/22/57221dd464064c193aeb4c06392076bd_1104x366.png)
效果:评论列表拿到首页
![](https://img.kancloud.cn/63/f3/63f3031567b83c6040eb8337a254d4ba_672x1202.png)
## 把外层这个评论框单独制作成一个组件
我们应该把外层灰色的框制作成一个独立的可以打开、关闭的组件,然后以后可以直接使用,使用时里面可以放任何内容。
### 封装 Panel 组件
通过 children 属性可以获取子组件的内容:
![](https://img.kancloud.cn/83/67/83673bcb3b94b316f8651037e50a9732_2760x734.png)
### 添加动画
为框添加一个关闭按钮并实现点击时的关闭动画
![](https://img.kancloud.cn/8d/19/8d19a2e5bf1faa310afd784c50893d0a_822x1658.png)
### 控制组件的打开
现在我们需要其他组件(可能是父组件、也可能是兄弟组件,也可能是完全不在一个级别的组件)来控制这个组件的打开功能。
1. 定义一个用来打开这个面板的方法
![](https://img.kancloud.cn/cb/e1/cbe187d62d236d4ec9c733a999dfc6ba_1448x1110.png)
2. 通过一个属性来控制是否调用这个函数
![](https://img.kancloud.cn/ef/df/efdf9a7e2798d498aea826fefe17c20a_1074x1146.png)
现在其他组件就可以通过这个组件的 open 属性来控制是否打开了。
### 添加一个 onClose 事件(双向绑定)
每当组件中关闭了面板时要通知父组件。
![](https://img.kancloud.cn/0e/22/0e22ef53f76e0e2f2cecea4619f170a2_1192x1718.png)
到此有了 open 和 onClose 两个属性之后就实现了打开关闭功能的双向绑定,基本就可以使用了。
## 跨层级使用这个 Panel 组件
难点:不同层级组件共享操作。
![](https://img.kancloud.cn/3d/9d/3d9dbaa2e1707820e4edf4ebf0d86118_1720x1376.png)
1. 在 Video.js (父组件中)定义属性并绑定到 评论上
![](https://img.kancloud.cn/c2/13/c21315d0a6e2e6fbd83b49533aac73a7_1502x1224.png)
2. 使用 Context 共享这个数据
2.1 创建 Context
![](https://img.kancloud.cn/3e/0d/3e0d5e2ad32c3eea97fb06062ab16202_1216x472.png)
2.2 使用 Context 共享数据
![](https://img.kancloud.cn/d3/45/d345aed1793b47d64178a8d1d81da55b_1576x1158.png)
2.3 在子组件的评论按钮上调用这个共享的方法
在 VideoPlay 组件中引入并使用
![](https://img.kancloud.cn/4c/ee/4ceef1ef56753544380d7f3d4bedb6de_1356x1642.png)
最后可以把 VideoPlay 中原来的打开评论的代码都删除,最终删除完之后:
![](https://img.kancloud.cn/69/c2/69c25698856bf142736200d7cefe0084_1190x1668.png)