UITableViewCell是否可被其他单元格重叠?带地图的单元格能否被第二部分覆盖?
嘿,我来帮你解答这两个关于UITableViewCell的问题:
1. UITableViewCell 是否可以被其他单元格重叠?
默认情况下,UITableView的单元格是垂直依次排列的,每个cell都会占据自己的行高空间,系统会自动管理它们的位置,不会出现重叠。不过如果你想实现重叠效果,也是有办法的:
- 可以自定义调整cell的
frame,让某个cell的位置覆盖在其他cell之上; - 或者修改cell的
layer.zPosition属性,数值越高的cell会显示在更上层; - 不过要注意,这种自定义操作可能会和UITableView的复用机制冲突,比如cell被复用后,你设置的frame或层级可能会被重置,需要在
cellForRowAt或者willDisplay方法里重新处理。
2. 带Google Map的UITableViewCell能否被第二部分单元格重叠?
当然可以实现,但直接把地图放在第一个cell里的方式可能会有一些坑,我给你拆解一下:
实现重叠的方法
如果坚持把地图放在第一个cell中,想要让后面的单元格覆盖它,你需要:
- 在创建后面的单元格时,设置它们的
layer.zPosition比地图cell的更高,这样这些cell就会显示在地图cell的上层; - 因为UITableView会复用cell,所以每次复用后面的单元格时,都要重新设置
zPosition,不然复用后层级可能会乱掉,推荐在willDisplay(_:forRowAt:)方法里做这个操作。
更优的替代方案
其实更稳定的实现方式是把Google Map作为UITableView的背景视图,而不是放在cell里:
- 这样地图会一直固定在table的底层,你只需要把第一个section的内容(或者第一个cell)设置成半透明或者部分透明,滚动table的时候,后面的单元格自然就会覆盖在地图上,而且完全不用处理cell复用的问题,逻辑更简单。
内容的提问来源于stack exchange,提问作者Terry
相关产品推荐
相关产品推荐

