UItableVIEw *tabelVIEw = [[UItableVIEw alloc] initWithFrame:self.vIEw.bounds]; [self.vIEw addSubvIEw:tabelVIEw];
但我意识到即使物理iPad 2旋转到横向模式,self.vIEw.bounds在vIEwDIDLoad和vIEwWillAppear中也是{{0,0},{768,1004}}.仅在vIEwDIDAppear中,它最终是{{0,{1024,748}}
self.vIEw.bounds正确设置为{{0,748}}的最早时间是多少?如果vIEwDIDAppear是那个,那么我必须在那里创建UItableVIEw,如果“启动图像”是一个静态的Landscape空白表,那么当调用vIEwDIDAppear时屏幕将闪烁白色屏幕,然后添加并查看该表,看到一缕白色的屏幕.
那么self.vIEw.bounds最早被设置为{{0,748}}的时间是多少?它似乎需要稍微在vIEwDIDAppear之前,以便绘制空白表(使用灰色线条),并显示它并无缝地显示以掩盖启动图像.如果使用self.vIEw.bounds在vIEwDIDLoad或vIEwWillAppear中创建表,则表最终为768点宽,适用于纵向模式.
更新:我只是尝试添加Launch图像,出于某种原因,即使在vIEwDIDAppear中添加了UItableVIEw,“白屏闪烁”也没有发生……我不知道为什么,但之前如果我使用CALayer和位图显示内容,并没有使用任何视图或drawRect,然后发生了闪光…顺便说一句,我发现的最早的是vIEwWillLayoutSubvIEws,然后是vIEwDIDLayoutSubvIEws,这两个都发生在vIEwDIDAppear之前,并且两者都显示self.vIEw.bounds为{{0,748}}
更新2:如果视图复杂且耗时,该怎么办?为了测试,我添加了一个usleep(100000);在tableVIEw:cellForRowAtIndexPath中为每个单元格休眠0.1秒,并且确实发生了“闪存”…但是单元格和表格应该是轻量级且快速制作,但是如果有更多时间的其他类型的视图怎么办?消费赚?如果我将UItableVIEw创建移动到vIEwWillLayoutSubvIEws,那么显示内容仍然很慢,但至少没有“flash”.但是,稍后当我旋转设备时,它实际上再次调用vIEwWillLayoutSubvIEws并将另一个表添加到主视图(具有正确的屏幕大小),因此vIEwWillLayoutSubvIEws将需要首先删除任何旧表视图(如果有),或者仅调整旧视图大小一个而不是添加一个新的.
解决方法 避免闪存的最简单方法是在vIEwDIDLoad中创建表视图并正确设置表视图的自动调整掩码,以便系统自动使表视图填充其超级视图:- (voID)vIEwDIDLoad { [super vIEwDIDLoad]; UItableVIEw *tableVIEw = [[UItableVIEw alloc] initWithFrame:self.vIEw.bounds]; tableVIEw.autoresizingMask = UIVIEwautoresizingFlexibleWIDth | UIVIEwautoresizingFlexibleHeight; [self.vIEw addSubvIEw:tableVIEw];}
否则,您可以在视图控制器的vIEwWillLayoutSubvIEws方法中看到最终视图边界的最早时间.您可以在vIEwDIDLoad中添加一次表视图,然后在vIEwWillLayoutSubvIEws或之后调用的方法中调整其框架.有关详细信息,请参阅我对UIViewController returns invalid frame?的回答.
总结以上是内存溢出为你收集整理的在iOS单视图应用中,何时是self.view.bounds设置正确的最早时间?全部内容,希望文章能够帮你解决在iOS单视图应用中,何时是self.view.bounds设置正确的最早时间?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)