2013-10-03 4 views
12

Я не нашел способ удалить полупрозрачный эффект (iOS 7) в UINavigationBar MFMailComposeViewController. Нет проблем для всех других UINavigationBars в моем приложении.Удалить прозрачный эффект в UINavigationBar MFMailComposeViewController

Я попытался это без успеха:

MFMailComposeViewController *mailController = [[MFMailComposeViewController alloc] init]; 
mailController.navigationBar.translucent = NO; 

Любая идея?

+0

Здравствуйте, вы нашли решение? –

+0

Нет, я этого не делал. Не уверен, что это возможно. –

+0

Вы пытались спрятать его и восстановить? Это похоже на проблему в iOS с модульными контроллерами. Я сдался и начал скрываться и восстанавливаться, увидев и увидев, что они появились. [[UIApplication sharedApplication] setStatusBarHidden: NO withAnimation: UIStatusBarAnimationNone]; – Aardvark

ответ

0

Я думаю, что я где-то читал, что Apple, не хочет, чтобы настроить что ViewController много, но кроме того, что принятый SO Anser здесь может помочь: MFMailComposeViewController in iOS 7 statusbar are black

... из-за временных проблем.

0
MFMailComposeViewController *mailVC = [[MFMailComposeViewController alloc] init]; 
[self.navigationController presentViewController:mailVC animated:YES completion:^{ 
    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; 
}]; 

, если не хотите, чтобы это изменить глобально:

Попробуйте добавить категорию MFMailComposeViewController

@implementation MFMailComposeViewController (IOS7_StatusBarStyle) 

-(UIStatusBarStyle)preferredStatusBarStyle 
{ 
    return UIStatusBarStyleLightContent; 
} 

-(UIViewController *)childViewControllerForStatusBarStyle 
{ 
    return nil; 
} 

@end 
0

Это не то, что может поместиться в несколько строк кода, но это один из подходов, который может сработать для вас.

Чтобы скрыть панель навигации:

[[само navigationController] setNavigationBarHidden: ДА анимированный: YES];

Для того, чтобы показать его:

[[само navigationController] setNavigationBarHidden: НЕТ анимированный: ДА];

Документация по этому методу доступна здесь.

Чтобы прослушать «двойной щелчок» или дважды коснитесь подкласса UIView и сделать экземпляр этого подкласса для свойства представления вашего контроллера представления.

В подклассе вида переопределите его -touchesEnded: withEvent: метод и подсчитайте количество касаний, которые вы получаете за время, путем измерения времени между двумя последовательными кранами, возможно, с -timeIntervalSinceDate :. Или проверьте результат с помощью [touch tapCount].

Если вы получили два крана, ваш подклассовый вид выдает NSNotification, зарегистрированный вашим контроллером просмотра для прослушивания.

Когда ваш контроллер просмотра слышит уведомление, он запускает селектор, который либо скрывает, либо показывает навигационную панель с использованием вышеупомянутого кода, в зависимости от текущего видимого состояния навигационной панели, доступ к которому осуществляется через чтение свойства навигационной панели isHidden.

1

Немного поздно, но для тех, кто приходит на этот пост:

По умолчанию Панель навигации в MFMailComposeViewController в будет полупрозрачным и вы не можете изменить. Единственными свойствами, которые вы можете изменить, являются те, которые поддерживаются прокси-сервером. От Apple Документация:

Иерархия представлений этого класса является частной и вы не должны изменять ее . Тем не менее, вы можете настроить внешний вид экземпляра, используя протокол UIAppearance .не

Это оставляет вас с ограниченными возможностями, чтобы изменить панель навигации внешний вид вашего MFMailComposeViewController, поскольку не все свойства поддерживаются (например, если вы пытаетесь что-то вроде [UINavigationBar внешний вид] setTranslucent: NO], это будет крах, потому что это имущество не поддерживается прокси

Вот список свойств поддерживается Appearance прокси:. https://gist.github.com/mattt/5135521

Теперь, чтобы установить Панель навигации в MFMailComposeViewController, чтобы быть не полупрозрачным, вы должны изменить свою BackgroundColor (Это UIView разрешенное свойство, UINavigationBar является подклассом UIVi ЭВ):

[[UINavigationBar appearance] setBackgroundColor:[UIColor whiteColor]]; 

Убедитесь, что вы делаете это, прежде чем создать экземпляр MFMailComposeViewController, например:

[[UINavigationBar appearance] setBackgroundColor:[UIColor whiteColor]]; 
MFMailComposeViewController *picker = [[MFMailComposeViewController alloc] init]; 

Вы также можете использовать appearanceWhenContainedIn: MFMailComposeViewController, чтобы повлиять на NavBar только тогда, когда это время принадлежит MFMailComposeViewController, или вы можете по желанию изменить его обратно до того, что было до этого в mailComposeController: didFinishWithResult.

Смежные вопросы