Tweak SplitViewController for vertical iPhone

In vertical orientation, the primary view controller is set to overlay
mode.
This commit is contained in:
Duy Tran Khanh committed 2022-11-17 11:07:05 +07:00
1 parent 7dbefd0861
commit 0a88ed672b
4 files changed
+39 -14

No files matched your search

+1
View File
@@ -135,6 +135,7 @@
<true/>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
</array>
+33 -13
View File
@@ -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 {
+4
View File
@@ -39,6 +39,10 @@ __attribute__((constructor)) void hookConstructor(void) {
@implementation UITraitCollection(hook)
- (UIUserInterfaceSizeClass)horizontalSizeClass {
return UIUserInterfaceSizeClassRegular;
}
- (UIUserInterfaceSizeClass)verticalSizeClass {
return UIUserInterfaceSizeClassRegular;
}
+1 -1
View File
@@ -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;