Objective c 在iOS8(而不是iOS7)中使用[UIView(几何体)\u ApplyEngineLayoutValues]重新输入视图时出现问题

Objective c 在iOS8(而不是iOS7)中使用[UIView(几何体)\u ApplyEngineLayoutValues]重新输入视图时出现问题,objective-c,iphone,uiview,ios8,autolayout,Objective C,Iphone,Uiview,Ios8,Autolayout,我正在开发一个由其他人启动的应用程序,我相信它是在iOS 5最新版本时启动的。大多数UI是由代码生成的,没有明确使用自动布局和约束。但是,在nib(xib)中定义了一些(后来添加的)自包含UI元素,这些元素在内部使用自动布局,由应用程序的更高级别视图包含(在代码中生成,不使用自动布局) 一段代码生成这些自包含元素之一的合成图像,设置该图像的动画,然后将该图像替换为实际的UI元素视图。可以将各种自包含的UI元素(都基于相同的基类,但具有自己的NIB(xib))传递到该例程中,该例程将按说明显示这些

我正在开发一个由其他人启动的应用程序,我相信它是在iOS 5最新版本时启动的。大多数UI是由代码生成的,没有明确使用自动布局和约束。但是,在nib(xib)中定义了一些(后来添加的)自包含UI元素,这些元素在内部使用自动布局,由应用程序的更高级别视图包含(在代码中生成,不使用自动布局)

一段代码生成这些自包含元素之一的合成图像,设置该图像的动画,然后将该图像替换为实际的UI元素视图。可以将各种自包含的UI元素(都基于相同的基类,但具有自己的NIB(xib))传递到该例程中,该例程将按说明显示这些元素。它们中的大多数在iOS 7和iOS 8中工作正常,在屏幕上显示动画

但是,仅iOS8上的一个特定UI元素可以正确地设置动画,但在动画的完成部分完成后,它会重置其位置,使其中心位于0,0。这一款在iOS 7中运行良好

我已经比较了代码和NIB中的元素,这些元素可以很好地与这一个元素配合使用,但是在创建和内部组合有问题的UI元素方面没有发现任何不同之处

我在“中心”关键路径的视图中添加了一个关键路径观察者,这样我就可以看到是谁导致了这种重新居中,并且它似乎在自动布局系统代码中——我的代码都不在回溯中

#0 0x002ed826 in -[MyFundsManager observeValueForKeyPath:ofObject:change:context:] at /Users/me/Dev/MyApp/iosapp/MyApp/MyFundsManager.m:158 #1 0x24b30372 in NSKeyValueNotifyObserver () #2 0x24b3001e in NSKeyValueDidChange () #3 0x24b1c840 in -[NSObject(NSKeyValueObserverNotification) didChangeValueForKey:] () #4 0x27463738 in -[UIView(Geometry) _applyISEngineLayoutValues] () #5 0x273898ee in -[UIView(Geometry) _resizeWithOldSuperviewSize:] () #6 0x23dff6ee in __53-[__NSArrayM enumerateObjectsWithOptions:usingBlock:]_block_invoke () #7 0x23dff5ea in -[__NSArrayM enumerateObjectsWithOptions:usingBlock:] () #8 0x2737a54a in -[UIView(Geometry) resizeSubviewsWithOldSize:] () #9 0x2746389c in -[UIView(AdditionalLayoutSupport) _is_layout] () #10 0x2760dbd4 in -[UIView(Hierarchy) _updateConstraintsAsNecessaryAndApplyLayoutFromEngine] () #11 0x27372b36 in -[UIView(CALayerDelegate) layoutSublayersOfLayer:] () #12 0x26d9accc in -[CALayer layoutSublayers] () #13 0x26d966b4 in CA::Layer::layout_if_needed(CA::Transaction*) () #14 0x26d9653c in CA::Layer::layout_and_display_if_needed(CA::Transaction*) () #15 0x26d95f20 in CA::Context::commit_transaction(CA::Transaction*) () #16 0x26d95d24 in CA::Transaction::commit() () #17 0x2736afc4 in _afterCACommitHandler () #18 0x23e9e5cc in __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ () #19 0x23e9bc8a in __CFRunLoopDoObservers () #20 0x23e9c092 in __CFRunLoopRun () #21 0x23dea620 in CFRunLoopRunSpecific () #22 0x23dea432 in CFRunLoopRunInMode () #23 0x2b1980a8 in GSEventRunModal () #24 0x273d4808 in UIApplicationMain () #25 0x0003e3fc in main at /Users/me/Dev/MyApp/iosapp/MyApp/main.m:17

我不知道该怎么办。我在不同的地方用YES和NO在父视图上尝试了
-setTranslatesAutoResizengMaskinToConstraints:
。我查看了添加时不这样做的自包含UI元素(视图控制器),并且没有看到任何明显的差异。我不知道该如何处理这个问题,因为代码是在自动布局中实现的,除了在特定的自包含视图控制器内,应用程序并没有真正有意识地使用自动布局。

在我的例子中,我有一个“隐藏的”
在我错过的子视图的实现中设置TranslatesAutoResizingMaskintoConstraints:NO
。消除这一点使一切都按其应有的方式运行

UIImageView *compositeImageView = [[UIImageView alloc] initWithImage:compositeImage];

[[payPage view] setAlpha:0.0f];

UIViewController *parentVC = [self visibleVC];

_parentVC = parentVC;

UIView *inView = [(MyStandardViewController *)parentVC localView];

CGRect middleRect = CGRectZero;

if (nil == fromView)
{
    middleRect.origin = [[[UIApplication sharedApplication] keyWindow] center];
}
else
{
    middleRect.origin = [[fromView superview] convertPoint:[fromView center] toView:inView];
}
[compositeImageView setFrame:middleRect];

_blockingView = [[UIView alloc] initWithFrame:[inView frame]];
[_blockingView setAlpha:0.0f];
[_blockingView setBackgroundColor:BLOCKINGVIEWBACKGROUNDCOLOR];

[inView addSubview:_blockingView];

[inView addSubview:compositeImageView];

[UIView animateWithDuration:2.25f animations:^{

        [compositeImageView setFrame:payRect];
        [_blockingView setAlpha:1.0f];
        }
    completion:^(BOOL finished) {

        [inView addSubview:[payPage view]];
        if (nil != parentVC)
           {
             [parentVC addChildViewController:payPage];
              }

        [[payPage view] setFrame:payRect];            
        [[payPage view] setAlpha:1.0f];           
        [compositeImageView removeFromSuperview];        
        }
    ];