【发布时间】:2019-12-03 19:08:34
【问题描述】:
我在滚动视图中有多个 UIStackViews。加载视图时,每个堆栈视图(例如 6 个)都填充了大约 8 个视图。这意味着在表格视图单元格点击时,将初始化 48 个视图并平等地添加到 6 个堆栈视图之一。可以想象,点击表格视图单元格加载堆栈视图时会有 0.5 - 1 秒的延迟。在 iOS 应用中,这绝对是一种慢下来的感觉。
简化我的代码如下所示:
for (index, stackView) in stackViews.enumerated() {
for view in views[index] {
stackView.addArrangedSubview(view)
}
}
我已经考虑了这些选项:
- 在堆栈视图进出视图时添加/删除它们,尽管在 iPad 上无论如何都可以看到所有堆栈视图。
- 多线程,虽然我不确定这是否可行,因为所有 UI 代码都需要在主线程上运行。
- 只需使用
draw,因为堆栈视图中的视图在外观上大多相似。
这些值得去做吗?还有其他我没有考虑过的选择吗?
【问题讨论】:
-
为什么不选择 CollectionView?
-
你能多介绍一下你在做什么吗?我刚刚做了一个快速测试,将 8 个
UILabels 添加到 6 个UIStackViews 中的每一个(因此,总共 48 个标签),它们几乎立即出现......0.0299...秒。 -
@DonMag 还有其他容器视图,堆栈视图位于内部以便对其进行样式设置(例如圆角、阴影)。你的结果让我觉得这些也可能导致减速。为了调试,您使用什么工具来确定交互之间的时间?
-
@mac38478 - 是的,这肯定是个问题。比较循环前后的
CFAbsoluteTimeGetCurrent(),我得到了不到 0.03 秒...使用 Instruments -> Time Profiler,循环在它自己的函数中(尝试让它尽可能接近),我看到 16.00 毫秒。 -
@mac38478 - 这是我快速测试的示例代码:pastebin.com/TNAjWc3L
标签: ios swift optimization uikit uistackview