ECSlidingViewController与iAds

问题描述:

我正在使用ECSlidingViewController与左侧&右侧菜单。ECSlidingViewController与iAds

试图让iAds显示在整个应用程序的底部。我的StoryBoard入口点是一个ViewController,它是一个ECSlidingViewController子类。

故事板设置为AutoLayout以及我所有的其他代码。

当我添加self.canDisplayBannerAds = YES;到viewWillAppear中构建失败:

View hierarchy unprepared for constraint. 
    Constraint: <NSAutoresizingMaskLayoutConstraint:0xb2a9030 h=--- v=--- UIView:0xa499b70.midX == UIView:0xa4a95f0.midX> 
    Container hierarchy: 
<UIView: 0xa4a95f0; frame = (0 0; 768 1024); layer = <CALayer: 0xa4a84d0>> 
    View not found in container hierarchy: <UIView: 0xa499b70; frame = (0 0; 768 1024); autoresize = W+H; layer = <CALayer: 0xa499380>> 
    That view's superview: <UIWindow: 0xb263e30; frame = (0 0; 768 1024); autoresize = W+H; gestureRecognizers = <NSArray: 0xb264f30>; layer = <UIWindowLayer: 0xb264080>> 
2014-01-06 20:22:15.772 AppTest[10851:a0b] View hierarchy unprepared for constraint. 
    Constraint: <NSAutoresizingMaskLayoutConstraint:0xb2a9180 h=--- v=--- UIView:0xa499b70.width == UIView:0xa4a95f0.width> 
    Container hierarchy: 
<UIView: 0xa4a95f0; frame = (0 0; 768 1024); layer = <CALayer: 0xa4a84d0>> 
    View not found in container hierarchy: <UIView: 0xa499b70; frame = (0 0; 768 1024); autoresize = W+H; layer = <CALayer: 0xa499380>> 
    That view's superview: <UIWindow: 0xb263e30; frame = (0 0; 768 1024); autoresize = W+H; gestureRecognizers = <NSArray: 0xb264f30>; layer = <UIWindowLayer: 0xb264080>> 
2014-01-06 20:22:15.772 AppTest[10851:a0b] View hierarchy unprepared for constraint. 
    Constraint: <NSAutoresizingMaskLayoutConstraint:0xb2a92b0 h=--- v=--- UIView:0xa499b70.midY == UIView:0xa4a95f0.midY> 
    Container hierarchy: 
<UIView: 0xa4a95f0; frame = (0 0; 768 1024); layer = <CALayer: 0xa4a84d0>> 
    View not found in container hierarchy: <UIView: 0xa499b70; frame = (0 0; 768 1024); autoresize = W+H; layer = <CALayer: 0xa499380>> 
    That view's superview: <UIWindow: 0xb263e30; frame = (0 0; 768 1024); autoresize = W+H; gestureRecognizers = <NSArray: 0xb264f30>; layer = <UIWindowLayer: 0xb264080>> 
2014-01-06 20:22:15.815 AppTest[10851:a0b] View hierarchy unprepared for constraint. 
    Constraint: <NSAutoresizingMaskLayoutConstraint:0xb2a92e0 h=--- v=--- UIView:0xa499b70.height == UIView:0xa4a95f0.height> 
    Container hierarchy: 
<UIView: 0xa4a95f0; frame = (0 0; 768 1024); layer = <CALayer: 0xa4a84d0>> 
    View not found in container hierarchy: <UIView: 0xa499b70; frame = (0 0; 768 1024); autoresize = W+H; layer = <CALayer: 0xa499380>> 
    That view's superview: <UIWindow: 0xb263e30; frame = (0 0; 768 1024); autoresize = W+H; gestureRecognizers = <NSArray: 0xb264f30>; layer = <UIWindowLayer: 0xb264080>> 
2014-01-06 20:22:15.815 AppTest[10851:a0b] View hierarchy unprepared for constraint. 
    Constraint: <NSAutoresizingMaskLayoutConstraint:0xb2a9030 h=--- v=--- UIView:0xa499b70.midX == UIView:0xa4a95f0.midX> 
    Container hierarchy: 
<UIView: 0xa4a95f0; frame = (0 0; 768 1024); layer = <CALayer: 0xa4a84d0>> 
    View not found in container hierarchy: <UIView: 0xa499b70; frame = (0 0; 768 1024); autoresize = W+H; layer = <CALayer: 0xa499380>> 
    That view's superview: <UIWindow: 0xb263e30; frame = (0 0; 768 1024); autoresize = W+H; gestureRecognizers = <NSArray: 0xb264f30>; layer = <UIWindowLayer: 0xb264080>> 
2014-01-06 20:22:15.838 AppTest[10851:a0b] *** Terminating app due to uncaught exception 'NSGenericException', reason: 'Unable to install constraint on view. Does the constraint reference something from outside the subtree of the view? That's illegal. constraint:<NSAutoresizingMaskLayoutConstraint:0xb2a9030 h=--- v=--- UIView:0xa499b70.midX == UIView:0xa4a95f0.midX> view:<UIView: 0xa4a95f0; frame = (0 0; 768 1024); layer = <CALayer: 0xa4a84d0>>' 

看起来我需要的地方添加约束的高度都显示网络成瘾者的时候会改变。

首先,在显示视图之前(即视图被加载时)设置为canDisplayBannerAds

其次,更新视图以便它没有自动转换自动调整大小约束(请参阅translatesAutoresizingMaskIntoConstraints)。

+0

在ECSlidingViewController子类上设置'translatesAutoresizingMaskIntoConstraints = NO'会导致侧面板无法正确显示并且不可能再次关闭它们。 – JMWhittaker

+0

然后您需要设置合适的框架/约束。我会非常想尝试不使用'canDisplayBannerAds',而只是将自己的横幅添加到主视图(所以广告不会显示在侧面板上)... – Wain

+0

Wain,是的,这是我现在拥有的。有点担心应用商店审查,但无论如何要提交它。我会继续尝试不同的解决方案。 – JMWhittaker

我认为你遇到的问题是你试图调整ECSlidingViewController的子视图的大小。您应该改为调整ECSlidingViewController的视图。

我会创建一个容器视图控制器并将其作为入口点。子视图将是iAd视图和ECSlidingViewController的视图。

+0

嗨迈克非常感谢这个工具,我有一个问题http://stackoverflow.com/questions/22308531/how-to-go-back-to-current-view-controller?noredirect=1#comment33898011_22308531你能请帮帮我? – 2014-03-10 18:59:06