Ios viewDidLayoutSubviews在切换到xcode 6后被无限调用
我的iOS应用程序在切换到xcode 6后停止正常工作。我发现在我的一个视图控制器中,viewDidLayoutSubviews方法被无限调用,直到内存级别达到某个点,应用程序因此崩溃 有人知道为什么会这样吗?我还注意到,在切换到xcode 6之后,我的一些观点开始显得怪异,但我在情节提要中解决了这些问题 非常感谢您的任何帮助 编辑1Ios viewDidLayoutSubviews在切换到xcode 6后被无限调用,ios,cocoa-touch,xcode6.3,Ios,Cocoa Touch,Xcode6.3,我的iOS应用程序在切换到xcode 6后停止正常工作。我发现在我的一个视图控制器中,viewDidLayoutSubviews方法被无限调用,直到内存级别达到某个点,应用程序因此崩溃 有人知道为什么会这样吗?我还注意到,在切换到xcode 6之后,我的一些观点开始显得怪异,但我在情节提要中解决了这些问题 非常感谢您的任何帮助 编辑1 -(void)viewDidLayoutSubviews { [super viewDidLayoutSubviews]; if (self.s
-(void)viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
if (self.showsPlayerControls == NO) {
self.playerControlsView.hidden = YES;
CGRect graphFrame = self.view.bounds;
graphFrame.size.height = graphFrame.size.height - 20.0f;
graphFrame.origin.y = 20.0f;
self.graphView.frame = graphFrame;
}
[self.graphView reloadData];
}
编辑2
我的修正如下,基本上将我的代码移动到viewwillbeen
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
if (self.showsPlayerControls == NO) {
self.playerControlsView.hidden = YES;
CGRect graphFrame = self.view.bounds;
graphFrame.size.height = graphFrame.size.height - 20.0f;
graphFrame.origin.y = 20.0f;
self.graphView.frame = graphFrame;
}
[self.graphView reloadData];
}
这就是我想要达到的目标吗 设置子视图的框架将触发新的布局
NSLayoutConstraint
s意味着对布局传播的需求不再有固定的层次结构
快速修复:
if (!CGRectEqualToRect(self.graphView.frame, graphFrame))
self.graphView.frame = graphFrame;
如果
reloadData
添加或减去子视图,则效果相同。如果仅因为帧更改而重新加载数据,请在仅设置帧时执行此操作。如果您使用viewdilayoutsubviews
推断出的不仅仅是子视图的布局,那么请停止。我也遇到了同样的问题。当我将UITableview的headerView设置为当前更新的headerView时,viewDidLayoutStubviews将被无限调用。所以我强制它,这样设置headerView只在Bool变量中发生一次
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
if (self.showsPlayerControls == NO) {
self.playerControlsView.hidden = YES;
CGRect graphFrame = self.view.bounds;
graphFrame.size.height = graphFrame.size.height - 20.0f;
graphFrame.origin.y = 20.0f;
self.graphView.frame = graphFrame;
}
[self.graphView reloadData];
}
var headerViewSet = false
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
commentsForRejected.numberOfLines = 0
commentsForRejected.text = "ABCDSAFMLDSFMWL W MELWFKMLWKFMLAWEKFM AWFMALWEFKMWELKFMLAWKF ANFOAWEFNAJWEFKNAEW AFNWKEFNKAWJFNEW"
self.headerView.frame = CGRect(x: 0,y: 0,width: headerView.frame.size.width, height: headerView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize).height)
if headerViewSet == false {
tableView.tableHeaderView = self.headerView
headerViewSet = true
}
}
你能发布你的
viewDidLayoutSubviews
实现吗?正如Tommy在下面的评论中所说,这是因为你正在调整graphView
的边界,这会导致再次调用viewDidLayoutSubviews
,从而创建一个无限循环。将代码移动到视图将出现似乎是一个合适的解决方案。帮助很大,谢谢!这个并不能解决问题:(