iOS Question Disable AutoRotate on a single view

Filippo

Expert
Licensed User

Erel

Administrator
Staff member
Licensed User
You can control the auto rotation property with this code:
B4X:
Sub Process_Globals
   'These global variables will be declared once when the application starts.
   'Public variables can be accessed from all modules.
   Public App As Application
   Public NavControl As NavigationController
   Private Page1 As Page
   Private Page2 As Page
End Sub

Private Sub Application_Start (Nav As NavigationController)
   'SetDebugAutoFlushLogs(True) 'Uncomment if program crashes before all logs are printed.
   NavControl = Nav
   Page1.Initialize("Page1")
   Page1.RootPanel.LoadLayout("1")
   NavControl.ShowPage(Page1)
   Page2.Initialize("Page2")
   Page2.RootPanel.Color = Colors.Red
End Sub

Sub Page1_Click
   NavControl.ShowPage(Page2)
End Sub

Sub Main_ShouldAutoRotate As Boolean
   If Page2.Visible = True Then
     Return False 'Don't auto rotate if Page2 is visible
   Else
     Return True
   End If
End Sub


#if OBJC
@end
@interface UINavigationController (B4IResize)

@end
@implementation UINavigationController (B4IResize)
- (BOOL)shouldAutorotate
{
  return [(NSNumber*)[B4IObjectWrapper raiseEvent:self :@"_shouldautorotate" :nil] boolValue];
}

#End If
To change the orientation: https://www.b4x.com/android/forum/t...-view-in-portrait-only-app.51391/#post-321845
 

Filippo

Expert
Licensed User
Thank you Erel!
You saved my life. :)
 

Daniel Uribe

Member
Licensed User
Hi, perfect!!

If you have another module with another NavigationController (with a slider menu by example) how can i call the event? all the page that are in my start navcontrol respond perfectly, but the others no, still changing of orientation. How can i Avoid autorotacion in another modules?
Thanks a lot!!!!
 

Filippo

Expert
Licensed User
Thank you Erel!
You saved my life. :)
My life is in danger again! :p
Since I changed the NavigationController and use a SideMenuController, the Sub Main_ShouldAutoRotate is no longer executed.
How can I fix the problem?
B4X:
Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'Public variables can be accessed from all modules.
    Public App As Application
    Public NavControl As NavigationController
    Private Page1 As Page
    Private Page2 As Page
    
    Private smc As SideMenuController
    Private pMenu As Page
End Sub

Private Sub Application_Start (Nav As NavigationController)
    NavControl.Initialize("NavControl")
    NavControl.NavigationBarVisible = False
    
    Page1.Initialize("Page1")
    Page1.RootPanel.LoadLayout("frmMainIphone")
    NavControl.ShowPage(Page1)
    Page2.Initialize("Page2")
    Page2.RootPanel.Color = Colors.Red
        
    pMenu.Initialize("lp")
    pMenu.RootPanel.LoadLayout("frmMenu")

    smc.Initialize(pMenu, NavControl, Null)
    App.KeyController = smc
End Sub

Sub Page1_Click
    NavControl.ShowPage(Page2)
End Sub

Sub Main_ShouldAutoRotate As Boolean
    If Page2.Visible = True Then
        Return False 'Don't auto rotate if Page2 is visible
    Else
        Return True
    End If
End Sub


#if OBJC
@end
@interface UINavigationController (B4IResize)

@end
@implementation UINavigationController (B4IResize)
- (BOOL)shouldAutorotate
{
  return [(NSNumber*)[B4IObjectWrapper raiseEvent:self :@"_shouldautorotate" :nil] boolValue];
}

#End If
 
Top