OC tableView中的cell非正常下移,获得点击后发生上移问题。

本文探讨了项目中使用tableview处理短视频业务时遇到的问题,视频显示位置异常。解决方法是理解tableView的cell高度会随navigationbar状态自动调整,通过设置_tableView.contentInsetAdjustmentBehavior属性来关闭此功能。关键词包括:tableview, cell高度, navigationbar, UIScrollViewContentInsetAdjustmentNever。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        最近接手了一个项目,做项目时发现了一个问题,项目中的短视频业务的视频切换用的是tableview,但是第一个视频在初始化后位置在屏幕的偏下方,但实际上tableview的frame是(0,0,屏宽,屏高)。cell的contentview也是(0,0),看起来都没问题。

        即使在我运行时打印出的各项坐标也都是正常的(0,0),但显示的位置却一直不对。一直以为是代码中有调整cell的坐标代码。苦苦找了一天也没有发现。后来无意间隐藏navigationcontroller后发现,视频比为隐藏时上移了,但获取到点击后仍然会调整位置。故而觉得,可能不是手动调整的,可能是tableview的控件特性。

        经过搜索,也确实是这个问题。先说结论吧,

tableview的cell其实是会根据navigationbar的显示隐藏自动调整首个cell的高度,如果隐藏了navigationbar也会根据状态栏下调高度(如果tableview的frame是(0,0)下会,如果状态栏并没有遮盖到tableview,并不会发生位移)。这其实是tableview为了防止系统控件遮盖cell内容的自动调整。如果希望cell不根据这个来调整,可以修改下面的属性:

_tableView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentNever;

这实际上是关闭了系统自带的自动调整功能。千辛万苦终于找到你了。

另外我在添加一下我找到的,但是没有起到作用的内容:

_tableView.rowHeight = 10;

这个实际上是调整每个cell的高度。

_tableView.estimatedRowHeight = 10;

行高预估,用来系统自动调整tableview的contentsize的东西,没啥大用我觉得。

 [tableView.delegate tableView:tableView didSelectRowAtIndexPath:[NSIndexPath indexPathForItem:0 inSection:0]];

默认首个cell处于被选中的状态。对此问题也没帮助


   [TableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] atScrollPosition:UITableViewScrollPositionTop animated:YES]; 

将首个cell滚动到指定位置,这里是滚动到顶部。但是仍然会收到自动调整的限制,对此问题没用

[TableView  scrollRectToVisible:CGRectMake(0, 0, 0.1, 0.1) animated:YES];

滚动到指定位置,效果同上。

tableview.automaticallyAdjustsScrollIndicatorInsets = NO;

禁止tableview自动调整内部位置的,查到的结果来看,似乎在scrollview中好用,没验证。对此问题反正是没用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值