gpt4 book ai didi

ios - 在 iOS 单 View 应用程序上,最早何时正确设置 self.view.bounds?

转载 作者:可可西里 更新时间:2023-11-01 04:40:15 25 4
gpt4 key购买 nike

我正在尝试添加 UITableView覆盖整个屏幕的对象,通过

  UITableView *tabelView = [[UITableView alloc] initWithFrame:self.view.bounds];
[self.view addSubview:tabelView];

但我意识到,即使物理 iPad 2 旋转到横向模式,self.view.bounds{{0, 0}, {768, 1004}}viewDidLoadviewWillAppear .仅在 viewDidAppear终于到了吗{{0, 0}, {1024, 748}}

self.view.bounds最早是什么时候正确设置为 {{0, 0}, {1024, 748}} ?如果viewDidAppear是一个,那么我必须创建 UITableView在那里,如果“启动图像”是一个静态的风景空白表格,那么屏幕将在 viewDidAppear 时闪烁白屏。被调用,然后添加并看到表格,所以看到一闪而过的白屏。

那么self.view.bounds最早是什么时候正确设置为 {{0, 0}, {1024, 748}} ?似乎需要稍微早于 viewDidAppear ,以便绘制空白表格(带有灰色线条),并显示它并无缝显示以掩盖启动图像。如果表创建于 viewDidLoadviewWillAppear使用 self.view.bounds , 然后表格最终宽度为 768 磅,适用于纵向模式。

更新:我刚刚尝试添加 Launch 图像,出于某种原因,即使 UITableView添加到 viewDidAppear ,“白屏闪烁”没有发生……我不知道为什么,但以前如果我使用 CALayer和位图来显示内容,并且没有使用任何 View 或 drawRect ,然后就闪现了……对了,我最早找到的是viewWillLayoutSubviews ,然后在 viewDidLayoutSubviews 中,两者都发生在 viewDidAppear 之前, 并且都显示 self.view.bounds作为{{0, 0}, {1024, 748}}

更新 2:如果制作 View 复杂且耗时怎么办?为了测试,我添加了 usleep(100000);tableView:cellForRowAtIndexPath为每个单元格休眠 0.1 秒,并且确实发生了“闪光”......但据称单元格和表格应该重量轻且制作速度快,但如果还有其他类型的 View 制作起来更耗时怎么办?如果我移动UITableView创建到 viewWillLayoutSubviews ,那么显示一些东西还是很慢,但至少没有“闪现”。但是,稍后当我旋转设备时,它实际上调用了 viewWillLayoutSubviews再次添加另一个表到主视图(具有正确的屏幕尺寸),所以 viewWillLayoutSubviews需要先删除任何旧 TableView (如果有),或者只调整旧 TableView 的大小而不添加新 TableView 。

最佳答案

避免闪退最简单的方法是在 viewDidLoad 中创建 TableView 并正确设置 TableView 的自动调整掩码,以便系统自动使 TableView 填充其父 View :

- (void)viewDidLoad {
[super viewDidLoad];
UITableView *tableView = [[UITableView alloc] initWithFrame:self.view.bounds];
tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self.view addSubview:tableView];
}

否则,最早可以看到最终 View 边界的时间是在 View Controller 的 viewWillLayoutSubviews 方法中。您可以在 viewDidLoad 中添加一次 TableView ,然后在 viewWillLayoutSubviews 或之后调用的方法中调整其框架。请参阅我对 UIViewController returns invalid frame? 的回答了解更多详情。

关于ios - 在 iOS 单 View 应用程序上,最早何时正确设置 self.view.bounds?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12118920/

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