gpt4 book ai didi

iphone - 调整大型 UITable 的大小会使应用程序停止运行

转载 作者:行者123 更新时间:2023-11-28 20:14:09 24 4
gpt4 key购买 nike

我有一个 UIViewController包含 UIScrollView它本身包含两个 UITableView和另一个 UIScrollView .内嵌套UIScrollView是另一个UITableView .

当在 ViewDidAppearUIViewController我计算表格应该有多大(比屏幕大得多)并设置它们的大小,然后设置 UIScrollView 的内容大小匹配它们包含的表格(UIScrollView 将提供滚动而不是表格本身)。这一切在模拟器中运行良好,但在实际设备上,它会停止运行,将处理器固定在 ~100% 的状态下持续数十秒。这显然是 Not Acceptable 。有人知道为什么吗?或者我该如何解决它?

代码看起来像这样:

OuterScrollView.ContentSize = new SizeF (View.Frame.Width, tableHeight);
InnerScrollView.ContentSize = new SizeF (InnerTable.Frame.Width, tableHeight);
InnerScrollView.Frame = new RectangleF(InnerScrollView.Frame.Location,
new SizeF(InnerScrollView.Frame.Width, tableHeight));

// So far so good
OuterTable.Frame = new RectangleF(OuterTable.Frame.Location,
new SizeF(OuterTable.Frame.Width, tableHeight)); // this slows everything down!!
InnerTable.Frame = new RectangleF(InnerTable.Frame.Location,
new SizeF(InnerTable.Frame.Width, tableHeight)); // and so does this

删除两个表 .Frame设置语句和一切都运行得足够快,但是使用它们非常慢。并且缓慢不会直接出现在这里,而是在调用基地 ViewDidAppear 之后的某个地方.

更新 :我顿悟了,如果调整表格的大小是问题,只需将表格足够大以至于不需要调整大小即可。在我的设置中,滚动是由 ScrollView 而不是表格本身来处理的,所以我可以将表格设置为非常大并让 ScrollView ContentSize注意剪裁表格的空白部分。这有效,因为它显示了我想要的方式,但实际上它更慢!所以我的结论是,问题不是表格调整大小,而是存在很长的表格(在这种情况下,我将高度设置为 4,000 - 调整大小将其设置为 2,354)表格。

背景 :为我正在尝试做的事情添加更多内容。由于 Apple 以他们的智慧认为没有人需要类似网格的控件,因此我正在尝试设置一种情况,即我有一个类似网格的 View ,其中最左侧的列保持在原位,但您可以水平滚动右侧 -大多数列,并且当您垂直滚动时,所有内容都将保持同步。经过一番搜索,我遇到了一个解决方案(对不起,不记得确切的位置),它经过一些调整(在模拟器中)。基本上,您将表格嵌入到 ScrollView 中,以便 ScrollView 可以处理滚动。布局看起来像这样:
 +-------------------------Outer Scroll-------------------------+
| +---------------Inner Scroll---------------+|
|+--Fixed Table--+ |+---------Scrolling Table----------------+||
|| | || |||
|| | || |||
|| | || |||
|| | || |||
|| | || |||
|| | || |||
|+---------------+ |+----------------------------------------+||
| +------------------------------------------+|
+--------------------------------------------------------------+

固定表格有一个带有几列的自定义单元格,而滚动表格有另一个带有其余列的自定义单元格(比屏幕宽)。您可以水平滚动滚动表(感谢内部 ScrollView ),并且您可以垂直滚动所有内容,这要归功于外部 ScrollView 。

另一个更新:因此,问题似乎在于当您将表格设置为大时表格没有重用单元格。我猜单元格重用逻辑仅扩展到确定单元格是否在表格的框架内,而不是表格的该部分是否实际可见。因此,使用 50 个项目,而不是显示 6-7 然后重新使用这些单元格,它会创建所有 50 个项目。所以我放弃了我之前的尝试,并尝试像这样在两个表之间同步滚动:
OuterTable.Scrolled += (sender, arg) =>
{
InnerTable.ContentOffset = new PointF(InnerTable.ContentOffset.X,
OuterTable.ContentOffset.Y);
};

InnerTable.Scrolled += (sender, arg) =>
{
OuterTable.ContentOffset = new PointF(0, InnerTable.ContentOffset.Y);
};

这几乎可行,除了 iOS 不喜欢水平滚动表格,所以内部表格仍然需要包裹在 ScrollView 中(使用 ContentSize 设置以覆盖我需要滚动的宽度)。在这一点上,它几乎可以工作。它通常会无缝地保持同步,但是通过一些困惑你可以得到,例如,内表对角滚动(尽管对每个人都设置了方向锁定),并且在某些情况下可能会使它们不同步,这看起来真的很愚蠢。所以它在视觉上并不能很好地工作,但至少它不会那么糟糕地挂起 UI 线程。

最佳答案

您是否尝试过使用自动布局来执行此操作?当 View 实际调整大小时,您无需负责,只需在 viewDidLoad 中设置约束,其余部分由系统处理。

但就手动布局而言 - 我不明白为什么会发生这种情况。当您使用 Instruments 对其进行分析时,Time Profiler 中的慢速部分是什么?

关于iphone - 调整大型 UITable 的大小会使应用程序停止运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18793133/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com