我的应用程序有两种不同的状态,每个状态都代表一个NSView.
因此,一次只显示一个视图,问题是当我在视图之间切换时,应用程序不显示新状态,直到我手动调整窗口大小!
我搜索了这个问题,并提供了多个解决方案,但没有任何对我有用:
[myView setNeedsdisplay:YES]; [myView display]; [[myView.window contentView] setNeedsdisplay:YES]; [mySubView1 setHidden:YES]; || [mySubView1 removeFromSuperView];
我甚至将myView定义为Outlet,但没有任何效果.
这是我的代码
if (appState == 1) { [self.splitView setFrameSize:CGSizeMake(self.splitView.frame.size.width,self.view.frame.size.height - 250)]; [self.mySubView1 setHidden:NO]; [self.mySubView2 setHidden:YES]; [self.mySubView2 removeFromSuperview]; [self.mySubView1 addSubview:self.inCallView]; } else { [self.splitView setFrameSize:CGSizeMake(self.splitView.frame.size.width,self.view.frame.size.height - 70)]; [self.mySubView1 setHidden:YES]; [self.mySubView2 setHidden:NO]; [self.mySubView1 removeFromSuperview]; [self.mySubView2 addSubview:self.chatHeaderView]; } // I need to redraw here [self.view setNeedsdisplay:YES]; [self.mySubView1 setNeedsdisplay:YES]; [self.mySubView2 setNeedsdisplay:YES]; // and nothing happened until I resize my window manually
解决方法
我发现它,代码很好,无需调用任何重绘方法,唯一的问题任何UI操作都需要在MAIN线程中完成
所以最终的代码是:
dispatch_async( dispatch_get_main_queue(),^{ if (appState == 1) { [self.splitView setFrameSize:CGSizeMake(self.splitView.frame.size.width,self.view.frame.size.height - 250)]; [self.mySubView1 setHidden:NO]; [self.mySubView2 setHidden:YES]; } else { [self.splitView setFrameSize:CGSizeMake(self.splitView.frame.size.width,self.view.frame.size.height - 70)]; [self.mySubView1 setHidden:YES]; [self.mySubView2 setHidden:NO]; } });
多谢你们.