Baseflow/Xamarin-Sidebar

Black Screen when using a Login page

ludiaz opened this issue · 3 comments

Hello,

Here is my code:

AppDelegate.cs

public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
{
    Window = new UIWindow(UIScreen.MainScreen.Bounds);

    if (isAuthenticated)
    {
        Window.RootViewController = new RootViewController();
    }
    else
    {
        Login screenLogin = new Login();
        screenLogin.OnLoginSuccess+= ScreenLogin_OnLoginSuccess
        Window.RootViewController = screenLogin ;
    }

    Window.MakeKeyAndVisible();

    return true;
    }

private void ScreenLogin_OnLoginSuccess(object sender, EventArgs e)
{
    isAuthenticated = true;
    Window.RootViewController = new RootViewController();
    Window.MakeKeyAndVisible();
}

RootViewController.cs

public partial class RootViewController : UIViewController
{
    public SidebarController SidebarController { get; private set; }
    public NavController NavController { get; private set; }

    public override void ViewDidLoad()
    {
        base.ViewDidLoad();

        NavController = new NavController();
        NavController.PushViewController(new Home(), false);

        SidebarController = new SidebarController(this, NavController, new Menu());
    }
}

My Login screen is a UIViewController. NavController is a class that inherits from UINavigationController. The fundamental is: if user is not authenticated, so, i show the login page. When the user enter the correct credentials, i call the event 'OnLoginSuccess', that is signed in AppDelegate. So, i change the isAuthenticated var to true and set my RootViewController class as Window.RootViewController and call Windows.MakeKeyAndVisible();

When i testing this code at emulator, works fine (iphone 5s, iphone 6s+, ipad pro 9.7). But, in a real device (iphone 6 and iphone 6s) only appears a Black Screen after the login.

All real devices are using iOS 11.1 and 11.0.3.

I'm little bit frustrated.

Thanks for the help!

It doesn't seem like something related to Sidebar. Have you tried it with just a normal UIViewController?

Hi!
I'm using the examples of https://github.com/jdehlin/Xamarin-Sidebar/tree/master/iOS as base to my code.
My RootViewController looks like very much as that you use in yourr examples.
Except, that i not use Xamarin.Forms. I'm using Xamarin.IOS. My RootViewController inherits of UIViewController, and your example use a PageRenderer. I don't know if that makes some diference. Maybe. I'm investigating and testing different scenarios to have a solid conclusion.

This logic worked in my case. In AppDelegate class.

In FinishedLaunching() method put this.

if (!VersionTracking.IsFirstLaunchEver) { var tabBarController = new RootViewController(); SetRootViewController(tabBarController, false); } else { UIStoryboard FirstOnboarding = UIStoryboard.FromName("FirstOnboarding", null); var tabBarController = GetViewController(FirstOnboarding, "MainOnBoard"); SetRootViewController(tabBarController, false); }

Now,

//To Set the Root View Controller public void **SetRootViewController**(UIViewController rootViewController, bool animate) { if (animate) { var transitionType = UIViewAnimationOptions.TransitionFlipFromRight; Window = new UIWindow(UIScreen.MainScreen.Bounds); Window.RootViewController = rootViewController; UIView.Transition(Window, 0.5, transitionType, () => Window.RootViewController = rootViewController, null); Window.MakeKeyAndVisible(); } else { Window = new UIWindow(UIScreen.MainScreen.Bounds); Window.RootViewController = rootViewController; Window.MakeKeyAndVisible(); } }

public UIViewController **GetViewController**(UIStoryboard storyboard, string viewControllerName) { return storyboard.InstantiateViewController(viewControllerName); }