Ishika
Ishika

Reputation: 2205

"NSInternalInconsistencyException [...] Sigh. Contentview size is zero." crash when using a UINavigationController

My code runs perfectly fine on iOS 10.3.3, whereas when I run the same code on iOS 11.2.1, it causes a crash at launch time with the following error:

Assertion failure in -[_UINavigationBarVisualProviderModernIOS _contentViewFittingHeight], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit/UIKit-3698.33.7/_UINavigationBarVisualProviderModernIOS.m:569
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Sigh. Contentview size is zero.'

I cleaned the code, cleared the derived data, but those did not solve the issue.

screenshot of crash

Upvotes: 0

Views: 576

Answers (3)

glyvox
glyvox

Reputation: 58119

This error occured to me with Xcode 10.2.1 and SideMenu 6.0.4. I ended up configuring the navigation controller programmatically, which solved the issue.

let sideMenuVc = UISideMenuNavigationController(rootViewController: <view controller>)

Upvotes: 0

Nike Kov
Nike Kov

Reputation: 13734

Fixed out, that two lines must be in viewWillLayoutSubviews instead of setup method. And like @Ishika said, this is the problem of iOS-Slide-Menu.

self.enableShadow = YES;
self.enableSwipeGesture = YES;

Upvotes: 0

Ishika
Ishika

Reputation: 2205

There was an issue in the library I was using for Slide menu "iOS-Slide-Menu". So, I simply changed this two very methods in the library which then worked fine.

- (void)setup
{
    [[NSUserDefaults standardUserDefaults] setObject:nil forKey:@"ssidName"];
    [[NSUserDefaults standardUserDefaults] synchronize];
    if (singletonInstance)
        NSLog(@"Singleton instance already exists. You can only instantiate one instance of SlideNavigationController. This could cause major issues");

    singletonInstance = self;

    self.menuRevealAnimationDuration = MENU_SLIDE_ANIMATION_DURATION;
    self.menuRevealAnimationOption = MENU_SLIDE_ANIMATION_OPTION;
}

- (void)viewWillLayoutSubviews
{
    [super viewWillLayoutSubviews];

    // Update shadow size of enabled
    if (self.enableShadow)
        self.view.layer.shadowPath = [UIBezierPath bezierPathWithRect:self.view.bounds].CGPath;
    self.landscapeSlideOffset = self.view.frame.size.width/6;
    self.portraitSlideOffset = self.view.frame.size.width/6;
    self.panGestureSideOffset = 0;
    self.avoidSwitchingToSameClassViewController = YES;
    self.enableShadow = YES;
    self.enableSwipeGesture = NO;
    self.delegate = self;
    // When menu open we disable user interaction
    // When rotates we want to make sure that userInteraction is enabled again
    [self enableTapGestureToCloseMenu:NO];

    if (self.menuNeedsLayout)
    {
        [self updateMenuFrameAndTransformAccordingToOrientation];

        // Handle different horizontal/vertical slideOffset during rotation
        // On iOS below 8 we just close the menu, iOS8 handles rotation better so we support keepiong the menu open
        if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"8.0") && [self isMenuOpen])
        {
            Menu menu = (self.horizontalLocation > 0) ? MenuLeft : MenuRight;
            [self openMenu:menu withDuration:0 andCompletion:nil];
        }

        self.menuNeedsLayout = NO;
    }
}

Upvotes: 4

Related Questions