Как вы можете отключить Центр уведомлений iOS в своем приложении? - PullRequest
26 голосов
/ 13 октября 2011

Если у вас полноэкранное приложение для iOS и вы хотите предотвратить снос центра уведомлений, можете и как?

Также можете ли вы блокировать показ уведомлений или баннеров во время загрузки приложения? (Я думаю, что это точно не так, но я хотел спросить на всякий случай.)

Ответы [ 4 ]

20 голосов
/ 14 октября 2011

По моему опыту, в полноэкранных приложениях (statusBarHidden = YES) поведение центра уведомлений немного отличается по умолчанию: проведя пальцем вниз по области, ранее занимаемой строкой состояния, вы увидите только небольшую вкладку. Только проведя по вкладке, появится центр уведомлений. Этого было достаточно, чтобы предотвратить случайную активацию для меня до сих пор.

В настоящее время нет общедоступного API для управления поведением центра уведомлений. Я придерживаюсь мнения, что маловероятно, что приложение когда-либо сможет блокировать появление уведомлений, и лишь немногим менее вероятно, что приложение сможет предотвратить появление центра уведомлений. iOS - это постоянное взаимодействие с пользователем по цене свободы разработчика. Я мог видеть разочарование от такой функциональности, если бы я был неожиданным пользователем.

Все это говорит о том, что всегда есть темная сторона недокументированных API. Я не удивлюсь, если вы сумеете проявить смекалку, используя устройства на взломанном устройстве, но это не моя чашка чая.

6 голосов
/ 22 февраля 2012

Я только сейчас понял это. Я разрабатываю игру, которая работает в альбомной ориентации, и всякий раз, когда я касаюсь левой стороны, появляется вкладка центра уведомлений. Чтобы это исправить, вы хотите добавить следующее:

setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft

Я добавил это сразу после установки setStatusBarHidden, и у меня больше не возникает проблема с вкладкой уведомлений.

Надеюсь, это поможет.

1 голос
/ 29 марта 2019

В iOS 11 был представлен API вместе с изменением поведения представления Центра уведомлений (и Центра управления), чтобы можно было указать желаемое поведение.

UIViewController.preferredScreenEdgesDeferringSystemGestures

В iOS 11+ Центр уведомлений всегда будет опускаться при перемещении с самой верхней части экрана, даже если строка состояния скрыта. preferredScreenEdgesDeferringSystemGestures позволяет указать, что смахивание края экрана не должно вызывать стандартный системный интерфейс пользователя, а вместо этого будет предоставлена ​​выдвижная вкладка, которую пользователь должен снова провести, чтобы открыть системный интерфейс.

Это предназначено для использования в играх, где пользователи часто проводят пальцами, когда нежелательно вводить системный интерфейс вместо управления игрой. Для такого иммерсивного приложения вы можете вернуть .all, чтобы указать, что вы не хотите, чтобы какой-либо системный пользовательский интерфейс появлялся в первый раз, когда вы проводите по краям экрана, и вместо этого ему следует отдавать предпочтение собственным жестам вашего приложения.

Обратите внимание, что это отключит возможность однократного пролистывания снизу, чтобы закрыть приложение на iPhone и iPad, на котором нет кнопок «Домой» - пользователю придется дважды провести пальцем, чтобы закрыть приложение.

По-прежнему нет способа полностью отключить Центр уведомлений из вашего приложения или предотвратить отображение уведомлений, пока ваше приложение находится на переднем плане.

0 голосов
/ 06 февраля 2013

Я создал очень простой фрагмент кода для программного решения этой проблемы.В моем делегате приложения настроен таймер, который запускается каждые 0,2 секунды, каждый раз, когда он запускается, он перемещает ориентацию строки состояния, поэтому это не влияет на ход игры.Я не испытывал раздражающий центр уведомлений в моем приложении с тех пор!Единственная проблема заключается в том, что регулятор громкости постоянно вращается и может раздражать, но это менее раздражает, чем центр уведомлений

int tick=0;

-(void)toggleNC
{
     [[UIApplication sharedApplication] setStatusBarHidden:YES]; 
    tick++;
    if (tick==1)
    {
     [[UIApplication sharedApplication]   setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft];
    }
    if (tick==2){
         [[UIApplication sharedApplication]     setStatusBarOrientation:UIInterfaceOrientationLandscapeRight];
    }
    if (tick==3){
      [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortrait];
   }
    if (tick==4){
        [[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationPortraitUpsideDown];
        tick=0;

    }
}
...