Tweak SplitViewController for vertical iPhone
In vertical orientation, the primary view controller is set to overlay mode.
This commit is contained in:
1 parent
7dbefd0861
commit
0a88ed672b
4 files changed
+39
-14
No files matched your search
@@ -135,6 +135,7 @@
|
||||
<true/>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
|
||||
@@ -3,9 +3,8 @@
|
||||
#import "LauncherNavigationController.h"
|
||||
#import "utils.h"
|
||||
|
||||
@interface LauncherSplitViewController () {
|
||||
@interface LauncherSplitViewController ()<UISplitViewControllerDelegate>{
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation LauncherSplitViewController
|
||||
@@ -14,26 +13,47 @@
|
||||
[super viewDidLoad];
|
||||
UIApplication.sharedApplication.idleTimerDisabled = YES;
|
||||
setViewBackgroundColor(self.view);
|
||||
|
||||
//TODO: maximumPrimaryColumnWidth
|
||||
self.delegate = self;
|
||||
|
||||
LauncherMenuViewController *masterVc = [[LauncherMenuViewController alloc] init];
|
||||
LauncherNavigationController *detailVc = [[LauncherNavigationController alloc] init];
|
||||
detailVc.toolbarHidden = NO;
|
||||
|
||||
self.presentsWithGesture = YES;
|
||||
self.preferredDisplayMode = UISplitViewControllerDisplayModeOneBesideSecondary;
|
||||
self.viewControllers = @[[[UINavigationController alloc] initWithRootViewController:masterVc], detailVc];
|
||||
BOOL isPortrait = self.view.frame.size.height > self.view.frame.size.width;
|
||||
self.preferredDisplayMode = isPortrait ?
|
||||
UISplitViewControllerDisplayModeOneOverSecondary :
|
||||
UISplitViewControllerDisplayModeOneBesideSecondary;
|
||||
if (@available(iOS 14.0, tvOS 14.0, *)) {
|
||||
self.preferredSplitBehavior = UISplitViewControllerSplitBehaviorTile;
|
||||
self.preferredSplitBehavior = isPortrait ?
|
||||
UISplitViewControllerSplitBehaviorOverlay :
|
||||
UISplitViewControllerSplitBehaviorTile;
|
||||
}
|
||||
|
||||
self.presentsWithGesture = YES;
|
||||
|
||||
self.viewControllers = @[[[UINavigationController alloc] initWithRootViewController:masterVc], detailVc];
|
||||
}
|
||||
|
||||
- (void)splitViewController:(UISplitViewController *)svc willChangeToDisplayMode:(UISplitViewControllerDisplayMode)displayMode {
|
||||
if (self.preferredDisplayMode != displayMode) {
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
self.preferredDisplayMode = UISplitViewControllerDisplayModeSecondaryOnly;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
- (UITraitCollection *)traitCollection {
|
||||
// Allows splitting on compact-sized iPhones
|
||||
UITraitCollection *collection = super.traitCollection;
|
||||
UITraitCollection *horizontalCollection = [UITraitCollection traitCollectionWithHorizontalSizeClass:UIUserInterfaceSizeClassRegular];
|
||||
return [UITraitCollection traitCollectionWithTraitsFromCollections:@[collection, horizontalCollection]];
|
||||
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator
|
||||
{
|
||||
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
|
||||
|
||||
self.preferredDisplayMode = size.height > size.width ?
|
||||
UISplitViewControllerDisplayModeOneOverSecondary :
|
||||
UISplitViewControllerDisplayModeOneBesideSecondary;
|
||||
if (@available(iOS 14.0, tvOS 14.0, *)) {
|
||||
self.preferredSplitBehavior = size.height > size.width ?
|
||||
UISplitViewControllerSplitBehaviorOverlay :
|
||||
UISplitViewControllerSplitBehaviorTile;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)dismissViewController {
|
||||
|
||||
@@ -39,6 +39,10 @@ __attribute__((constructor)) void hookConstructor(void) {
|
||||
|
||||
@implementation UITraitCollection(hook)
|
||||
|
||||
- (UIUserInterfaceSizeClass)horizontalSizeClass {
|
||||
return UIUserInterfaceSizeClassRegular;
|
||||
}
|
||||
|
||||
- (UIUserInterfaceSizeClass)verticalSizeClass {
|
||||
return UIUserInterfaceSizeClassRegular;
|
||||
}
|
||||
|
||||
+1
-1
@@ -70,7 +70,7 @@ void* gbuffer; // OSMesa framebuffer
|
||||
long showingWindow;
|
||||
int windowWidth, windowHeight;
|
||||
int physicalWidth, physicalHeight;
|
||||
bool isInputReady, isCursorEntered, isPrepareGrabPos, isUseStackQueueCall;
|
||||
BOOL isInputReady, isCursorEntered, isPrepareGrabPos, isUseStackQueueCall;
|
||||
jboolean isGrabbing;
|
||||
BOOL virtualMouseEnabled;
|
||||
|
||||
|
||||
Reference in new issue
Block a user