Is it possible to disable Control Center in iOS 7 programmatically and if not, what are alternatives?
Asked Answered
P

3

29

I have developed an app that uses swipe gesture from bottom up. It was working perfectly in iOS 6, but now iOS 7 came out, and it works maybe 1 out of 25 times: i get iOS 7 Control Center almost every time. Obviously, Control Center can be disabled in the Settings, but that is up to the phone owner, and I cannot control that. So my question is, is there a way to disable Control Center for the time when my app is running (or more likely, is "active", as I would want Control Center back if the user is not actively using my app). If not, what are the alternatives? Is relocating/reworking that functionality is the only solution?

Provost answered 10/10, 2013 at 21:21 Comment(5)
Not an option. Unlikely to be an option in the future. Best to rework your interface.Novena
@Novena is there a particular reason why it would be unlikely in the future?Provost
Because Apple want to maintain consistency for the users. If any app can turn it off how will users know?Novena
@Novena well, I was thinking in terms of how I can turn on/off Status Bar when I am running my appProvost
But that is visible - the user can see the status bar isn't there. If the gesture doesn't work, how does the user know why? There is a risk most will think something is broken...Novena
D
11

No alternatives, really. The best you can do is warn users and ask them to go to settings to turn it off.

Realistically, you'll lose a lot of users just by asking that, so you should change the gestures.

Destitution answered 10/10, 2013 at 21:26 Comment(1)
Yeah, unfortunately, I moved control icons from the top to the bottom to avoid collision with the notification center. Then iOS7 comes out, and the bottom is no longer an option because the user can swipe from the bottom. So top and bottom are both out. Left and right are poor options because of real estate issues.Fascista
N
51

Actually there is an option. You cannot disable it. But you can prevent the accidental launch. Just disable the status bar. Then on swipe the user will be prompted whether the control centre have to be launched or not. it won't be launched in a single swipe. Instead an arrow appears on the first swipe and the user need to click and drag the arrow to launch the control centre, hence prevent accidental launch. Use this code to disable status bar.

You can disable the status bar using this delegate in IOS7:

- (BOOL) prefersStatusBarHidden
{
    return YES;
} 

And this method in IOS6.1 and prior:

[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
Nevins answered 12/11, 2013 at 10:12 Comment(9)
That's for notifications (swiping from the top). The question is about control centre (swiping from the bottom)Menado
Hiding the status bar prevents the accidental launch of both the notifications and control centre. I have tried it. Please try it and see the trick. PS:It doesn't disable anything, just prevents the accidental launch.Nevins
@HarikrishnanT thank you for suggestion, but this is not a solution for me. I have a functionality that was triggered by "up"-swipe from the bottom, so I don't want any control center at all, accidental or not.Provost
@mike.tihonchik: Read this carefully. Especially the 7th point under "Things Every App Should Do": developer.apple.com/library/ios/documentation/userexperience/…Nevins
@HarikrishnanT thank you for the link. The problem i am facing is that iOS determines that Control Center is needed 99% of the times. Initial design called for an image that was located on the bottom of the screen (about 20px in height), which, when "dragged" up would bring a new view (very similar to what Control Center is). Anyway, I am redesigning this to move the functionality somewhere else [up vote for the useful link]Provost
In that case, a small suggestion, why not use a tap recogniser in the image? When the image is "tapped" instead of being "dragged", it would bring your new view.Nevins
@HarikrishnanT the problem is, if you tap anywhere in the bottom region of the screen (about 20px in height; this is where the image is) Control Center "arrow" shows upProvost
I'm confused with where to put the prefersStatusBarHidden method and what delegate/protocol that is.Laodicean
@Laodicean prefersStatusBarHidden is a method that may optionally implemented by a custom subclass of UIViewControllerCilicia
C
14

Starting with the iOS 11 SDK (compiled in Xcode 9) additionally to implementing prefersStatusBarHidden:

Objective-C:

- (BOOL) prefersStatusBarHidden
{
    return YES;
} 

Swift 4+:

override var prefersStatusBarHidden: Bool { return true }

you also need to implement preferredScreenEdgesDeferringSystemGestures:

Objective-C:

- (UIRectEdge)preferredScreenEdgesDeferringSystemGestures{
    return UIRectEdgeAll;
};

Swift 4+:

override func preferredScreenEdgesDeferringSystemGestures() -> UIRectEdge {
    return .all
}

Otherwise the Control/Notification Center appear directly; instead of first showing the gray box with a up/down arrow that needs to be dragged up/down.

Certes answered 24/10, 2017 at 12:41 Comment(0)
D
11

No alternatives, really. The best you can do is warn users and ask them to go to settings to turn it off.

Realistically, you'll lose a lot of users just by asking that, so you should change the gestures.

Destitution answered 10/10, 2013 at 21:26 Comment(1)
Yeah, unfortunately, I moved control icons from the top to the bottom to avoid collision with the notification center. Then iOS7 comes out, and the bottom is no longer an option because the user can swipe from the bottom. So top and bottom are both out. Left and right are poor options because of real estate issues.Fascista

© 2022 - 2024 — McMap. All rights reserved.