更改导航控制器框架后的iOS 6 ViewController框架问题

时间:2014-05-23 05:05:52

标签: ios iphone objective-c ios6

我有一个基于导航的应用程序,我必须减少导航控制器的帧。 在iOS 6中将导航控制器帧减少50px后,子视图控制器的高度应该是(480-64(导航栏+状态栏)-50(我减少的高度)= 366。但是我的视图控制器高度为386px。这些额外的20px视图控制器位于导航栏下。请参阅附图。

任何人都可以帮助我为什么会出现这个问题?在iOS7中,它可以正常工作。

这是我的示例代码: AppDelegate:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor yellowColor];

    ViewController* vc =[[ViewController alloc]initWithNibName:@"ViewController" bundle:nil];
    vc.view.backgroundColor = [UIColor greenColor];
    UINavigationController* navVC = [[UINavigationController alloc]initWithRootViewController:vc];
    self.window.rootViewController = navVC;
    [self.window makeKeyAndVisible];

    UIGraphicsBeginImageContextWithOptions(CGSizeMake(36, 36), NO, 0.0);
    UIImage *blank = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    [[UINavigationBar appearance] setBackgroundImage:blank forBarMetrics:UIBarMetricsDefault];
    return YES;
}

按钮单击视图控制器的事件:

- (IBAction)buttonClicked:(id)sender {
    CGRect navFrame = self.navigationController.view.frame;
    navFrame.size.height -=50;
    self.navigationController.view.frame = navFrame;
}

enter image description here

2 个答案:

答案 0 :(得分:0)

因为视图控制器边界将取决于根视图控制器,并且您的导航控制器应至少为44像素。所以你想要显示广告然后请减少子视图内容框架高度而不是self.navigationController.view框架。

并将您的广告视图添加到Window中。不要试图减少导航或viewcontroller框架高度。尝试减少或调整子视图的高度和坐标。并将您的广告添加到窗口底部。

尝试以这种方式添加广告视图

@interface HomeVC : UIViewController<GADBannerViewDelegate>
{
}

@property(nonatomic, strong) GADBannerView *adBanner;

@end

@implementation HomeVC
- (void)viewDidLoad
{
[super viewDidLoad];
   // Initialize the banner at the bottom of the screen.
    CGPoint origin = CGPointMake(isIpad?20.0:0.0, isIpad?935.0:IS_IPHONE_5?518.0:430.0);

    //    // Use predefined GADAdSize constants to define the GADBannerView.
    self.adBanner = [[GADBannerView alloc] initWithAdSize:isIpad?kGADAdSizeLeaderboard:kGADAdSizeBanner origin:origin];
    self.adBanner.backgroundColor = [UIColor whiteColor];
    // Note: Edit SampleConstants.h to provide a definition for kSampleAdUnitID before compiling.
    self.adBanner.adUnitID = adMobKey;
    self.adBanner.delegate = self;
    self.adBanner.rootViewController = self;

     [self.adBanner loadRequest:[self request]];
}

- (void)adViewDidReceiveAd:(GADBannerView *)adView
{

    [[[[UIApplication sharedApplication] delegate] window] addSubview:self.adBanner];
}
@end

如果你还有任何问题,请跟我说。

答案 1 :(得分:0)

要显示广告,您无需剪切视图控制器视图。 Apple提供了在应用中添加广告横幅的功能。请查看this

另请务必阅读Best Practices

另请参阅iAdSuite,它会在您的应用中提供包含广告的精彩示例。 这应该会带你朝着正确的方向前进。我希望这有帮助