关键词: 开发, iOS, tableView,
使用SnapKit+FDTemplateLayoutCell时cell无法计算高度
FDTemplateLayoutCell是一款很好用的自动计算cell高度的开源框架,然鹅现在越来越多的同学会使用约束代码构建布局.比如swift的SnapKit或者OC的Masonry
但有的时候会遇到一些诡异的问题, 例如在确定cell内容在约束代码没有错误的情况下却无法计算cell高度,
例如下面这样
查了一些资料 确实有少部分同学遇到了同样的问题,而且经过测试bug 不是绝对成立
最后在翻看github时看到一位同学这样描述到
察觉到这可能是自己项目中的问题本质,
因为在项目中 用到了snapKit, tableView 肯定也是通过约束布局编写的
tableView.snp.makeConstraints { (mark) in
mark.top.left.right.equalTo(0)
mark.height.equalTo(KMainScreenSize.height - 64 - KAdaptedSize(50))
}
如上代码 没有指定宽度 只是进行了相对布局
如果 你开启了fd的日志打印
tableView.fd_debugLogEnabled = true
会看到这么一行提示
2017-08-17 16:51:04.771 sjt2[69976:26043709] ** FDTemplateLayoutCell ** layout cell created - PostSerachTableViewCell
2017-08-17 16:51:04.775 sjt2[69976:26043709] [FDTemplateLayoutCell] Warning once only: Cannot get a proper cell height (now 0) from '- systemFittingSize:'(AutoLayout). You should check how constraints are built in cell, making it into 'self-sizing' cell.
2017-08-17 16:51:04.776 sjt2[69976:26043709] ** FDTemplateLayoutCell ** calculate using sizeThatFits - 45
结合上面同学提到的问题,给tableView约束添加完成之后强制刷新view,让后面调用systemFittingSize时可以获取到值
tableView.snp.makeConstraints { (mark) in
mark.top.left.right.equalTo(0)
mark.height.equalTo(KMainScreenSize.height - 64 - KAdaptedSize(50))
}
self.view.layoutIfNeeded()
或者也可以直接不用约束写frame
lazy var tableView:UITableView = {
let t = UITableView(frame: CGRect(x: 0, y: 0, width: KMainScreenSize.width, height: KMainScreenSize.height - KAdaptedSize(50) - 64))
t.separatorStyle = .none
t.delegate = self
t.dataSource = self
return t
}()
重新运行代码问题解决,具体问题原因参考
layoutSubviews()
TableView,iOS11 frame 全屏模式下 导航栏占位
关键词: iOS11,tableview, collectionView, 导航栏, 空白
在iOS11 上 出现了 一个适配问题, 当隐藏导航栏且 Y 坐标=0时, 状态栏依然出现占位空白
主要原因是 iOS 11 上 automaticallyAdjustsScrollViewInsets 被废弃;
同时实用 tableView,collectionView,
之前可以直接写在基类里, 现在需要在子类中调用了
使用下面方法替换
func resetAutomaticallyAdjustsScrollViewInsetsWithIOS11(subView:UIScrollView?) {
if #available(iOS 11.0, *) {
if let view = subView {
view.contentInsetAdjustmentBehavior = .never
}
} else {
self.automaticallyAdjustsScrollViewInsets = false
}
}
TableView,iOS11 刷新某一行时 导致 UI 界面跳动
关键词: 刷新,跳动
问题是 iOS 11 的新特性导致的
需要在创建 tableView 处加入
self.tableView.estimatedRowHeight = 0;