我有一个视图,它被交换到加载速度非常慢的UIContainerView(大约1秒钟)。由于UITabView(不是UITabViewController)进行切换,因此用户非常注意,因为在绘制视图之前,选项卡按钮不会更新。
我已经确定这是由于Autolayout造成的。我的应用程序使用故事板并关闭了Autolayout,视图快速闪电(但完全没用)。我必须使用Autolayout。
我的视图包含大约35个UISwitch控件,分别放在UIScrollView上。还有大约10个UITextFields和1个UITextView。每个控件旁边都有一个相应的标签(基本上这个屏幕收集用户的Y / N数据和其他一些文本信息...认为老式数据库就像带有复选框的屏幕,我用交换机替换了)。
我的速度问题不是由于数据加载 - 正如我所说,我已经确定在绘制视图时它是100%的Autolayout问题。
我尝试了将布局展平(所有控件都位于UIScrollView顶部)以及创建视图层次结构(UIViews内部的每个部分和子部分中的所有控件,位于UIScrollView顶部的其他UIViews中)。子视图版本肯定更快,因为UIView上的控件松动需要2秒更新。
我也多次重新约束它并且相信我发现允许设备旋转的自生成约束的数量最少,然后我使用“添加缺失约束”功能添加剩余部分来消除Autolayout中的警告/错误。我自己生成的大部分都是并排标签和UITextView上的“相等宽度”约束,使它们在横向方向上水平拉伸。
我在这里以及其他地方阅读了有关在屏幕外绘制视图然后只是展示它的评论。由于我在UIContainerView中交换视图,这似乎是一个很好的建议,但我找不到任何关于如何执行此操作的说明。我已经在它的视图控制器的ViewDidLoad中实例化它,并且直到正确的选项卡按钮被击中才交换它。
我还需要做些什么才能让它在屏幕外“画画”以帮助解决这个速度问题?
(请不要建议减少屏幕上的控件数量或使用并发性来在后台加载数据。我必须在这一个视图中拥有所有控件并且数据加载不是问题。我也不能使用表格视图代替此滚动视图。)
非常感谢。
编辑 - 视觉:
+---------------------------------------------------+
| |
| +-----Section 1---------------------------+ |
| | label |SW| label |SW| label |SW| | |
| | label |___textField___| label |SW| | | This is an approximate version
| | label |SW| label |SW| label |SW| | | of the layout. There are a number
| +-----------------------------------------+ | sections and subsections, and a
| | number of UISwitches, UITextFields,
| | and labels for each one.
| +-----Section 2---------------------------+ |
| | label |SW| label |SW| label |SW| | | Each section has a colored or
| | label |___textField___| label |SW| | | graphical background.
| | label |SW| label |SW| label |SW| | |
| | label |SW| label |SW| label |SW| | |
| | label |SW| label |SW| label |SW| | |
| | label |SW| label |___textField__| | |
| +-----------------------------------------+ |
| |
| |
| +-----Section 3---------------------------+ |
| | label |SW| label |SW| label |SW| | | Somewhere around here is the
| | label |___textField___| label |SW| | | bottom of the iPad screen and the
| | label |SW| label |___textField__| | | rest scrolls as this is all
| +-----------------------------------------+ | inside a large UIScrollView.
| |
| |
| +-----Section 4---------------------------+ |
| | +---Subsection A-------------------+ | |
| | | label |SW| label |SW| | | |
| | | label |__textField___| | | |
| | | label |__textField___| | | |
| | +----------------------------------+ | |
| | +---Subsection B-------------------+ | |
| | | label |SW| label |SW| | | |
| | | label |__textField___| | | |
| | | label |__textField___| | | |
| | +----------------------------------+ | |
| | +---Subsection C-------------------+ | |
| | | label |SW| label |SW| | | |
| | | label |__textField___| | | |
| | | label |__textField___| | | |
| | +----------------------------------+ | |
| +-----------------------------------------+ |
| |
+---------------------------------------------------+