nop*_*ole 5 uiviewcontroller uiview ios
我试图添加一个UITableView覆盖整个屏幕的对象
UITableView *tabelView = [[UITableView alloc] initWithFrame:self.view.bounds];
[self.view addSubview:tabelView];
Run Code Online (Sandbox Code Playgroud)
但我意识到,即使物理iPad 2的旋转为横向模式,self.view.bounds是{{0, 0}, {768, 1004}}在viewDidLoad和viewWillAppear.只有在viewDidAppear最后{{0, 0}, {1024, 748}}
最self.view.bounds正确的设定时间是什么时候{{0, 0}, {1024, 748}}?如果viewDidAppear是那个,那么我必须在UITableView那里创建,如果"启动图像"是静态横向空白表,那么当viewDidAppear调用时屏幕将闪烁白色屏幕,然后添加并查看表格,看到闪光的白色屏幕.
那么什么时候最早的时间self.view.bounds设置正确{{0, 0}, {1024, 748}}呢?它似乎需要稍微提前viewDidAppear,以便绘制空白表(使用灰线),并显示它并无缝显示以掩盖启动图像.如果在表中创建表viewDidLoad或viewWillAppear使用self.view.bounds表,则表最终为768点宽,适用于纵向模式.
更新:我只是尝试添加启动图像,由于某种原因,即使UITableView添加viewDidAppear,"白屏闪存"没有发生...我不知道为什么,但以前,如果我使用CALayer和位图显示内容,并没有使用任何视图或drawRect,然后闪光发生...顺便说一句,我发现的最早的viewWillLayoutSubviews,然后在viewDidLayoutSubviews之前发生的viewDidAppear两个,都显示self.view.bounds为{{0, 0}, {1024, 748}}
更新2:如果视图复杂且耗时,该怎么办?为了测试,我添加了一个usleep(100000);在tableView:cellForRowAtIndexPath睡觉0.1秒每个单元格,而"闪电侠"的确发生了......但细胞和桌子,好像应该是重量轻,速度快使,但如果有其他类型的观点,即制作时间更长?如果我将UITableView创作移动到viewWillLayoutSubviews,那么显示某些东西的速度仍然很慢,但至少没有"闪光".但是,稍后当我旋转设备时,它实际上viewWillLayoutSubviews再次调用并将另一个表添加到主视图(具有正确的屏幕大小),因此viewWillLayoutSubviews需要首先删除任何旧的表视图(如果有的话),或者仅调整旧的视图大小和不添加新的.
避免闪现的最简单方法是创建表视图并viewDidLoad正确设置表视图的自动调整大小掩码,以便系统自动使表视图填充其超级视图:
- (void)viewDidLoad {
[super viewDidLoad];
UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds];
tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self.view addSubview:tableView];
}
Run Code Online (Sandbox Code Playgroud)
否则,您最早可以看到最终视图边界的时间是在视图控制器的viewWillLayoutSubviews方法中。您可以在 中添加一次表视图viewDidLoad,然后在 中viewWillLayoutSubviews或之后调用的方法中调整其框架。看看我对UIViewController 返回无效框架的回答?更多细节。
| 归档时间: |
|
| 查看次数: |
1682 次 |
| 最近记录: |