Ios viewDidLayoutSubviews在切换到xcode 6后被无限调用

Ios 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

我的iOS应用程序在切换到xcode 6后停止正常工作。我发现在我的一个视图控制器中,viewDidLayoutSubviews方法被无限调用,直到内存级别达到某个点,应用程序因此崩溃

有人知道为什么会这样吗?我还注意到,在切换到xcode 6之后,我的一些观点开始显得怪异,但我在情节提要中解决了这些问题

非常感谢您的任何帮助

编辑1

-(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
,从而创建一个无限循环。将代码移动到
视图将出现
似乎是一个合适的解决方案。帮助很大,谢谢!这个并不能解决问题:(