Jak zapobiec zasłanianiu widoku UINavigationBar w systemie iOS 7?

Po aktualizacji do Xcode 5, paski nawigacji we wszystkich widokach mojej aplikacji przesunęły się w dół. Oto kilka zrzutów ekranu, pierwszy pokazujący wszystko w widoku, gdy jest ściągnięty, a drugi pokazujący wszystko nietknięte. Pasek wyszukiwania powinien zaczynać się tam, gdzie pasek nawigacji.

Wszystkie TreściWszystkie treści na bezczynności

Ktoś wie, jak Mogę to naprawić?

Edit: próbowałem tego wcześniej:

if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
        self.edgesForExtendedLayout = UIRectEdgeNone;

Ale daje bardzo dziwne wyniki.

Próba Rozwiązania

Może to być spowodowane tym, że mam "menu slajdów" pod tym kontrolerem widoku, które pojawia się ze względu na przezroczystość paska nawigacyjnego.

Author: Code cracker, 2013-09-23

10 answers

Ustaw właściwość paska nawigacji na No :

self.navigationController.navigationBar.translucent = NO;

To naprawi widok z ramki pod paskiem nawigacji i paskiem stanu.

Jeśli musisz pokazać i ukryć pasek nawigacji, użyj

 if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
    self.edgesForExtendedLayout = UIRectEdgeNone;   // iOS 7 specific

W Twojej metodzie viewDidLoad.

 221
Author: Deepesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-06 05:51:43

In iOS 7 by defaults all Controller translucent property value is YES, so you set translucent property NO for this issue.

self.navController.navigationBar.translucent = NO;
 29
Author: Sumit Mundra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-05 19:39:57

Możesz wyłączyć "Rozszerz krawędzie" w Inspektorze atrybutów kontrolera widoku tego ekranu (jak pokazano na poniższym obrazku) :

Tutaj wpisz opis obrazka

 20
Author: Achyut Sagar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-02 05:23:05

Jeśli chcesz zachować przezroczystość na navigationBar, na końcu viewDidLoad lub w viewWillAppear Dodaj tę linijkę kodu:

[self.view sendSubviewToBack:self.tableView]

Somehow if your scrollView subclass (UITableView, UICollectionView, itd.) ma wartość index 0 w bieżącym widoku subviews, automatycznie dostosuje wkładki zgodnie z twoim navigationBar. I nie powinno to wpływać na twój interfejs użytkownika w wersjach poprzedzających iOS7.


EDIT Jeśli programowo zainicjujesz swoją UITableView, to najlepiej dodać ją do widoku za pomocą to [self.view insertSubview:self.tableView atIndex:0];

 8
Author: jbouaziz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-01 13:50:19

To działa również dla swift na iOS 8.1

navigationController?.navigationBar.translucent = false
 8
Author: uplearnedu.com,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-20 20:59:23

Możesz dodać tę metodę do kontrolera widoku, jak pokazano na tym URL :

-(void)viewDidLayoutSubviews
{
    [super viewDidLayoutSubviews];
    self.searchBar.frame = 
    CGRectMake(0, self.topOfViewOffset, self.searchBar.frame.size.width, self.searchBar.frame.size.height);
}
 3
Author: malkoty,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-17 08:58:58

Innym podejściem jest ustawienie self.automaticallyAdjustsScrollViewInsets = YES; na kontrolerze widoku. Jest to domyślnie włączone. Ale w Twoim przypadku:

Widzę, że używasz EGORefreshHeaderView. Gra z contentInset UITableView. Po zwolnieniu nagłówek zresetuje górną wstawkę zamiast przywrócić poprzednią wartość.

 2
Author: Krivoblotsky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-05 19:55:17

Swift 4:

Ustaw następujący wiersz kodu w metodzie viewDidLoad:

self.navigationController?.navigationBar.isTranslucent = false
 2
Author: Md. Najmul Hasan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-04 05:31:26

Jeśli chcesz mieć pełną kontrolę nad widokami i uniknąć błędnych korekt iOS, podklasa UITableView i dostosować wstawki (zarówno przewijanie i wskaźniki) w -(void)willMoveToWindow:(uiwindow *)newWindow. Mi pasuje.

 -1
Author: Farhad Malekpour,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-04 21:38:39

Inną opcją jest otwarcie informacji.plik plist w trybie kodu źródłowego i wprowadź następujące informacje:

<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>UIStatusBarHidden</key>
<true/>
Mam nadzieję, że to pomoże.
 -3
Author: Nicoli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-05 19:40:17