我的应用程序有两种不同的状态,每个状态都代表一个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]; } });
多谢你们.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。