iOS不能播放Mp4视频和tableView刷新抖动问题全解
一、iOS不能播放Mp4视频
1、问题表现
播放异常的视频(埃及四千年)
异常表现:视频加载缓慢,播放时,有音频无页面或无音频无画面
单品视频地址:http://imgv36.ddimg.cn/video/item/228e8afb16ab45c58d47d3ee8f9dfd48.mp
2、问题分析
①、iOS 支持 h.264/aac 先确认编码格式是否有问题
若编码格式有问题 建议按照编码格式 h.264/aac,重新编码,导出视频。
②、视频剪辑问题
去一个例子:
参照正常播放的单品:( 孙俪遇见你,陪伴你)
单品视频地址: http://imgv37.ddimg.cn/video/item/d0771333d8f7441d961d7c4eae67c049.mp4
视频导出时的 扫描方式:逐行扫描

问题视频的视频导出时的 扫描方式:隔行扫描 或 ”上场优先“等

3、解决问题
①、剪辑视频时,调整导出设置,请谨慎调整导出设置。
②、导出视频的设置正确后,还未能解决,建议按照编码格式 h.264/aac,重新编码,导出视频。
二、tableView刷新抖动问题全解
1、视图漂移或者闪动原因
因为iOS 11后系统默认开启Self-Sizing,首先要知道Self-Sizing是个什么东东。官方文档是这样解释的:大概就是说我们不用再自己去计算cell的高度了,只要设置好这两个属性,约束好布局,系统会自动计算好cell的高度。
iOS11以后,Self-Sizing默认开启,包括Headers, footers。如果项目中没使用estimatedRowHeight属性,在iOS11下会有奇奇怪怪的现象,因为iOS11之前,estimatedRowHeight默认为0,Self-Sizing自动打开后,contentSize和contentOffset都可能发生改变。
iOS tableview开启高度估算(Self-Sizing),reloadData的时候不再全部计算高度。
2、解决方案
①、在初始化tableview的时候加上这几行
_tableView.estimatedRowHeight = 0;
_tableView.estimatedSectionHeaderHeight = 0;
_tableView.estimatedSectionFooterHeight = 0;
②、若上述方法不能解决问题,请移除上述设置。
改用部分隐藏的直接设置为0 ,需要预估高度的,配置一个预估高度。
//UI较复杂,请使用下列刷新方式
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if (self.isNeedPhone) {
return 80;
}
return 0;
}
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForHeaderInSection:(NSInteger)section
{
if (section == 0) {
return 200;
}
return 0;
}
- (CGFloat)tableView:(UITableView *)tableView estimatedHeightForFooterInSection:(NSInteger)section
{
if (self.receiptOverlayerModel.isNeedPhone) {
return 110;
}
return 0;
}
③、还未解决,采用预计算,缓存cell或header或footer高度,直接代理方法返回吧。