Baseflow / Xamarin-Sidebar

A slideout navigation control for Xamarin.iOS
https://baseflow.com
Apache License 2.0
113 stars 67 forks source link

Black Screen when using a Login page #79

Open ludiaz opened 6 years ago

ludiaz commented 6 years ago

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!

jdehlin commented 6 years ago

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

ludiaz commented 6 years ago

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.

shanusingh3 commented 5 years ago

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); }