iOS开发随手笔记

iOS不能播放Mp4视频和tableView刷新抖动问题全解

2019-05-11  本文已影响10人  择势量投

一、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高度,直接代理方法返回吧。

上一篇 下一篇

猜你喜欢

热点阅读