iOS 7: UITableView pokazuje na pasku stanu

Pierwszy ekran mojej aplikacji to UITableViewController bez paska nawigacyjnego, co oznacza, że zawartość przepływa pod paskiem stanu, więc jest dużo kolizji tekstu. Dostosowałem zarówno właściwości dla Under top bars, jak i Adjust scroll view insets, które w rzeczywistości powstrzymują go przed przewijaniem pod spodem, ale kosztem utrzymania widoku góry tabeli pod spodem. Próbowałem ustawić ramkę UITableView na przesunięcie o 20 pikseli, ale wydaje się, że nie działa i ponieważ obecnie potrzebuję aplikacji, aby była kompatybilna z iOS 6 I nie można przejść do Storyboardów iOS 7, aby wymusić autolayout, aby użyć przewodnika górnej wysokości. Czy ktoś znalazł rozwiązanie, które działa dla obu wersji?

Rzeczy, które próbowałem: ustawienie edgesForExtendedLayout, zmiana ustawień w Storyboardzie dla Under top bars i Adjust scroll view, wymuszenie ramki na nowym obszarze.

Obraz jest wart tysiąca słów: Przepływ paska stanu pod

Author: bneely, 2013-09-19

25 answers

Jeśli ktoś jest zainteresowany replikacją tego, po prostu wykonaj następujące kroki:]}

    Tworzenie nowego projektu iOS]}
  1. otwórz główny storyboard i usuń domyślny / początkowy UIViewController
  2. przeciągnij nowy UITableViewController z biblioteki obiektów
  3. ustaw go jako początkowy kontroler widoku
  4. podaj tabelę danych testowych

Jeśli wykonasz powyższe kroki, po uruchomieniu aplikacji, zobaczysz, że nic, w tym dostosowanie pól wyboru Xcode do " rozszerzyć Krawędzie pod paskiem {Góra, Dół, nieprzezroczyste} " działa, aby zatrzymać pierwszy wiersz pojawiający się pod paskiem stanu, ani nie można rozwiązać tego programowo.

Np. w powyższym scenariuszu, następujący efekt będzie miał No:

// These do not work
self.edgesForExtendedLayout=UIRectEdgeNone;
self.extendedLayoutIncludesOpaqueBars=NO;
self.automaticallyAdjustsScrollViewInsets=NO;

Ten problem może być bardzo frustrujący, i uważam, że jest to błąd na końcu Apple, zwłaszcza, że pojawia się on w ich własnej Pre-przewodowej UITableViewController z biblioteki object.

Nie zgadzam się z każdym, kto próbuje rozwiązać ten problem używając jakiegokolwiek forma "magicznych liczb" np. "użyj delty 20px". Tego rodzaju ściśle powiązane programowanie zdecydowanie nie jest tym, czego chce od nas Apple.

Odkryłem dwa rozwiązania tego problemu:

  • Zachowanie sceny UITableViewController :
    Jeśli chcesz zachować UITableViewController w storyboardzie, bez ręcznego umieszczania go w innym widoku, możesz osadzić UITableViewController w UINavigationController (edytor > osadzanie w > kontroler nawigacji) i odznaczyć opcję "pokazuje pasek nawigacji" w Inspektor. Rozwiązuje to problem bez dodatkowych poprawek, a także zachowuje scenę UITableViewController w storyboardzie.

  • Używanie AutoLayout i osadzanie UITableView w innym widoku (wierzę, że Apple chce, żebyśmy to zrobili.):
    Utwórz pusty UIViewController i przeciągnij w nim swoje UITableView. Następnie Ctrl-przeciągnij z UITableView w kierunku paska stanu. Gdy mysz dotrze do dołu paska stanu, zobaczysz bańkę Autolayout z napisem " Góra Layout Guide". Zwolnij mysz i wybierz "odstępy pionowe". To powie systemowi układu, aby umieścił go tuż pod paskiem stanu.

Przetestowałem oba sposoby na pustej aplikacji i obie działają. Być może będziesz musiał wykonać dodatkowe poprawki, aby działały w Twoim projekcie.

 362
Author: marinosbern,
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-03-02 22:30:16

Jeśli robisz rzeczy programowo i używasz UITableViewController Bez UINavigationController najlepiej jest wykonać następujące czynności w viewDidLoad:

Swift 3

self.tableView.contentInset = UIEdgeInsets(top: 20, left: 0, bottom: 0, right: 0)

Wcześniej Swift

self.tableView.contentInset = UIEdgeInsetsMake(20.0f, 0.0f, 0.0f, 0.0f);

UITableViewController nadal będzie przewijać za paskiem stanu, ale nie będzie pod nim po przewinięciu do góry.

 83
Author: lipka,
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-02-08 11:15:11

Proszę zauważyć: to działało dla mnie dla następującej konfiguracji:

  • Brak paska nawigacyjnego u góry ekranu (widok tabeli spełnia pasek stanu)
  • widok tabeli nie jest przewijalny

Jeśli powyższe dwa wymagania nie są spełnione, twój przebieg może się różnić.

Original Post

Stworzyłem swój widok programowo i skończyło się na tym, że działa dla mnie:

- (void) viewDidLayoutSubviews {
    // only works for iOS 7+
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
        CGRect viewBounds = self.view.bounds;
        CGFloat topBarOffset = self.topLayoutGuide.length;

        // snaps the view under the status bar (iOS 6 style)
        viewBounds.origin.y = topBarOffset * -1;

        // shrink the bounds of your view to compensate for the offset
        viewBounds.size.height = viewBounds.size.height + (topBarOffset * -1);
        self.view.bounds = viewBounds;
    }
}

Źródło (w sekcji topLayoutGuide na dole pg.39).

 23
Author: Stunner,
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-05-28 23:00:45

Dodanie do góry odpowiedzi:

Po tym, jak druga metoda początkowo nie działała, zrobiłem dodatkowe Majsterkowanie i znalazłem rozwiązanie.

TLDR; najlepsze rozwiązanie 2nd odpowiedź prawie działa, ale dla niektórych wersji Xcode ctrl + przeciąganie do "Top Layout Guide" i wybierając odstępy pionowe nic nie robi. Jednak najpierw dostosowując rozmiar widoku tabeli, a następnie wybierając "Top Space to Top Layout Guide" działa


  1. Przeciągnij puste miejsce ViewController na storyboard. Kontroler Widoku

  2. Przeciągnij obiekt UITableView do widoku. (Nie UITableViewController). Umieść go na samym środku za pomocą niebieskich linii pomocniczych.

Widok TabeliCenter Image

  1. przeciągnij UITableViewCell do widoku tabeli. Będzie to twoja prototypowa komórka wielokrotnego użytku, więc nie zapomnij ustawić jej identyfikatora ponownego użycia na karcie Atrybuty, ponieważ w przeciwnym razie otrzymasz awarię.

Dodaj Komórkę Widoku TabeliIdentyfikator Ponownego Użycia

  1. Utwórz własną podklasę UIViewController i dodaj <UITableViewDataSource, UITableViewDelegate> protokoły. Nie zapomnij ustawić kontrolera widoku swojej storyboard na tę klasę w Inspektorze tożsamości.

  2. Utwórz ujście dla TableView w pliku implementacji i nazwij go "tableView"

Utwórz OutlettableView

  1. kliknij prawym przyciskiem myszy widok tabeli i przeciągnij zarówno źródło danych, jak i delegata do swojego ViewController.

dataSource delegate

Teraz dla części nie przycinanie do paska stanu.

  1. chwyć górną krawędź widoku tabeli i przesuń ją w dół do jednej z niebieskich linii pomocniczych automatycznego układu, które znajdują się w pobliżu góry

Zmień rozmiar

  1. Teraz możesz sterować przeciąganiem z widoku tabeli do góry i wybrać Top Space to Top Layout Guide

Przewodnik Top Space to Top Layout

  1. to daje błąd o niejednoznacznym układzie TableView, wystarczy dodać brakujące ograniczenia i gotowe.

Dodaj Brakujące Ograniczenia

Teraz możesz skonfigurować widok tabeli jak zwykle, a pasek stanu nie zostanie przycięty!

 20
Author: ErikAGriffin,
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
2016-08-05 13:17:20
- (void) viewDidLayoutSubviews {
    if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) {
        self.navigationController.navigationBar.barStyle = UIBarStyleBlackOpaque;
        if ([self respondsToSelector:@selector(edgesForExtendedLayout)])
            self.edgesForExtendedLayout = UIRectEdgeNone;   // iOS 7 specific
        CGRect viewBounds = self.view.bounds;
        CGFloat topBarOffset = self.topLayoutGuide.length;
        viewBounds.origin.y = topBarOffset * -1;
        self.view.bounds = viewBounds;
        self.navigationController.navigationBar.translucent = NO;
    }
}

Https://developer.apple.com/library/ios/documentation/userexperience/conceptual/TransitionGuide/SupportingEarlieriOS.html#//apple_ref/doc/uid/TP40013174-CH14-SW1

 11
Author: Olzh,
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-05-24 23:14:52

Oto Jak to napisać w "Swift" Korekta do odpowiedzi @lipka:

tableView.contentInset = UIEdgeInsetsMake(20.0, 0.0, 0.0, 0.0)
 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
2015-01-12 21:12:33

Wybierz UIViewController na storyboardzie i odznacz opcję Rozszerz krawędzie pod górnym paskiem. Dla mnie zadziałało. : )

 6
Author: pegpeg,
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-10-03 15:19:59

Dla Xcode 7, un-tykanie "półprzezroczysty" znacznik wyboru paska nawigacyjnego zadziałało dla mnie.

Tutaj wpisz opis obrazka

 5
Author: David T,
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
2016-02-20 11:33:06

To naprawi to dla kontrolera UITableViewController (bez żadnych magicznych liczb). Jedyną rzeczą, której nie mogłem naprawić, jest połączenie telefoniczne, w którym to przypadku górna część widoku tableView jest zbyt mocno spychana w dół. Jeśli ktoś wie, jak to rozwiązać, proszę dać nam znać.

class MyTableViewController: UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()    
        configureTableViewTop()
    }

    override func viewWillTransitionToSize(size: CGSize, withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator) {
        super.viewWillTransitionToSize(size, withTransitionCoordinator: coordinator)
        coordinator.animateAlongsideTransition({ (context) -> Void in
            }, completion: { (context) -> Void in
                self.configureTableViewTop()
        })
    }

    func configureTableViewTop() { 
        tableView.contentInset.top = UIApplication.sharedApplication().statusBarFrame.height
    }
}
 3
Author: Harris,
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
2016-07-29 23:42:05

Nie wiem jak to jest koszerne, ale odkryłem, że ten schemat przesuwa widok Viewcontrollera w dół i zapewnia pasek stanu z solidnym tłem:

- (void)viewDidLoad {
    [super viewDidLoad];

    // Shove everything down if iOS 7 or later
    float systemVersion = [[[UIDevice currentDevice] systemVersion] floatValue];
    if (systemVersion >= 7.0f) {

        // Move the view down 20 pixels
        CGRect bounds = self.view.bounds;
        bounds.origin.y -= 20.0;
        [self.view setBounds:bounds];

        // Create a solid color background for the status bar
        CGRect statusFrame = CGRectMake(0.0, -20.0, bounds.size.width, 20);
        UIView* statusBar = [[UIView alloc] initWithFrame:statusFrame];
        statusBar.backgroundColor = [UIColor redColor];
        [self.view addSubview:statusBar];
    }

Oczywiście zastąp redColor dowolnym kolorem tła.

Aby ustawić kolor znaków/symboli na pasku stanu, musisz oddzielnie wykonać jeden z kliknięć. Używam View controller-based status bar appearance = NO i Status bar style = Opaque black style w pliście, aby zrobić to globalnie.

Wygląda na to, że działa i chciałbym usłyszeć o jakichś Bugach lub problemy z tym.
 2
Author: Hot Licks,
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-01-22 22:08:47

ODPOWIEDŹ Chappjc działa świetnie podczas pracy z XIBs.

Znalazłem najczystsze rozwiązanie podczas tworzenia Tableviewcontroller programowo jest przez owinięcie instancji UITableViewController w innym UIViewController i ustawienie ograniczeń odpowiednio.

Oto jest:

UIViewController *containerLeftViewController = [[UIViewController alloc] init];
UITableViewController *tableViewController = [[UITableViewController alloc] init];

containerLeftViewController.view.backgroundColor = [UIColor redColor];

hostsAndMoreTableViewController.view.translatesAutoresizingMaskIntoConstraints = NO;
[containerLeftViewController.view addSubview:tableViewController.view];

[containerLeftViewController addChildViewController:tableViewController];
[tableViewController didMoveToParentViewController:containerLeftViewController];

NSDictionary * viewsDict = @{ @"tableView": tableViewController.view ,
                              @"topGuide": containerLeftViewController.topLayoutGuide,
                              @"bottomGuide": containerLeftViewController.bottomLayoutGuide,
                              };
[containerLeftViewController.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[tableView]|"
                                                                                         options:0
                                                                                         metrics:nil
                                                                                           views:viewsDict]];
[containerLeftViewController.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[topGuide][tableView][bottomGuide]"
                                                                                         options:0
                                                                                         metrics:nil
                                                                                           views:viewsDict]];
Zdrówko, Ben.]}
 2
Author: tubtub,
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-05-16 22:52:25

Myślę, że podejście do używania UITableViewController może być nieco inne od tego, co robiłeś wcześniej. Zadziałało na mnie, ale możesz nie być jego fanem. To, co zrobiłem, to mieć kontroler widoku z widokiem kontenera, który wskazuje na mój UItableViewController. W ten sposób mogę korzystać z TopLayoutGuide dostarczonego do mojego storyboardu in. Wystarczy dodać ograniczenie do widoku kontenera i należy się nim zająć zarówno dla iOS7, jak i iOS6.

 1
Author: Phong Le,
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-09-22 22:03:19

Skończyło się na użyciu jednego dodatkowego widoku z żądanym tłem, dodanym po widoku TableView i umieszczonym w pasku stanu:

    self.CoverView = [[UIView alloc]init];

    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {

    self.CoverView.frame = CGRectMake(0,0,self.view.bounds.size.width,20);
    }

    self.CoverView.backgroundColor = [UIColor whiteColor];
    self.TableView = [[UITableView alloc]initWithFrame:CGRectMake(0,
    self.CoverView.bounds.size.height,XXX, YYY)];
    [self.view addSubview:self.TableView];
    [self.view addSubview:self.CoverView];

Nie jest to zbyt ładne, ale jest to raczej proste rozwiązanie, jeśli potrzebujesz pracować z widokami bez xib i zarówno IOS6, jak i IOS7

 1
Author: lilislilit,
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-16 10:53:42

Zrobiłem to dla wyświetlania siatkówki / Nie siatkówki jako

BOOL isRetina = FALSE;

if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
    if ([[UIScreen mainScreen] scale] == 2.0) {
        isRetina = TRUE;
    } else {
        isRetina = FALSE;
    }
}

if (isRetina) {
    self.edgesForExtendedLayout=UIRectEdgeNone;
    self.extendedLayoutIncludesOpaqueBars=NO;
    self.automaticallyAdjustsScrollViewInsets=NO;
}
 1
Author: Salim,
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-26 11:51:59

Poniższe rozwiązanie działa wystarczająco dobrze w kodzie bez użycia stałych magicznych i umożliwia użytkownikowi zmianę klasy wielkości, np. poprzez rotacje lub aplikacje side-by-side na iPadach:

- (void)traitCollectionDidChange:(UITraitCollection *)previousTraitCollection {
    [super traitCollectionDidChange:previousTraitCollection];
    // Fix up content offset to ensure the tableview isn't underlapping the status bar.
    self.tableView.contentInset = UIEdgeInsetsMake(self.topLayoutGuide.length, 0.0, 0.0, 0.0);
}
 1
Author: qix,
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
2016-07-21 02:21:20

Działa dla swift 3-In viewDidLoad ();

let statusBarHeight = UIApplication.shared.statusBarFrame.height

let insets = UIEdgeInsets(top: statusBarHeight, left: 0, bottom: 0, right: 0)
tableView.contentInset = insets
tableView.scrollIndicatorInsets = insets

Ten kod: 1. Pobiera wysokość paska stanu 2. Nadaje górnej części widoku tabeli wstawkę zawartości równą wysokości paska stanu. 3. Daje wskaźnik przewijania taką samą wstawkę, więc pojawia się pod paskiem stanu.

 1
Author: Wesh RaphLola,
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-02-11 11:07:10

Miałem Pasek UISearchBar na górze mojego UITableView i następujące zadziałało;

self.tableView.contentInset = UIEdgeInsetsMake(20, 0, 0, 0);
self.tableView.contentOffset = CGPointMake(0, -20);
Podziel się i ciesz się...
 0
Author: Sam T,
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-22 21:43:06

I got it work by setting size to freeform

Tutaj wpisz opis obrazka

 0
Author: fengd,
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-22 16:09:16

Rozwiązanie Abrahama https://developer.apple.com/library/ios/qa/qa1797/_index.html pracował dla mnie w następujący sposób. Miałem jeden UITableviewcontroller jako mój początkowy widok. Próbowałem kodu offsetowego i osadzania w navconie, ale ani nie rozwiązałem przezroczystości paska stanu.

Dodaj Kontroler Viewcontroller i ustaw go jako widok początkowy. Powinno to pokazać najważniejsze górne i dolne linie pomocnicze układu.

Przeciągnij Stary Widok Tableview do widoku w nowym kontrolerze.

Do all rzeczy do doposażenia tabeli w nowy kontroler:

Zmień swój stary kontroler widoku.H plik do dziedziczenia / podklasy z UIViewController zamiast UITableViewController.

Dodaj UITableViewDataSource i UITableViewDelegate do kontrolera viewcontrollera .h.

Podłącz ponownie wszystko, co potrzebne w storyboardzie, takie jak pasek wyszukiwania.

Najważniejsze jest skonfigurowanie ograniczeń, tak jak w Apple Q & A. nie zawracałem sobie głowy wstawianiem paska narzędzi. Nie jestem pewna dokładnej sekwencji. Ale czerwona ikona pojawiła się na przewodnikach układu, być może, gdy zbudowałem. Kliknąłem go i niech Xcode zainstalować / wyczyścić ograniczenia.

Potem klikałem wszędzie, aż znalazłem ograniczenie pionowej przestrzeni i zmieniłem jego górną wartość z -20 na 0 i działało idealnie.

 0
Author: Jack Bellis,
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-07-04 17:58:35

Używam UISplitViewController z navigationcontroller i tableviewcontroller. To działało dla mnie w widoku głównym po wypróbowaniu wielu rozwiązań tutaj:

float systemVersion = [[[UIDevice currentDevice] systemVersion] floatValue];
if (systemVersion >= 7.0f) {

    // Move the view down 20 pixels
    CGRect bounds = self.view.bounds;
    bounds.origin.y -= 20.0;
    [self.navigationController.view setBounds:bounds];

    // Create a solid color background for the status bar
    CGRect statusFrame = CGRectMake(0.0, -20.0, bounds.size.width, 20);
    UIView* statusBar = [[UIView alloc] initWithFrame:statusFrame];
    statusBar.backgroundColor = [UIColor whiteColor];
    [statusBar setAlpha:1.0f];
    [statusBar setOpaque:YES];
    [self.navigationController.view addSubview:statusBar];
}

Jest podobny do rozwiązania Hot Licks, ale stosuje subview do kontrolera navigationController.

 0
Author: sfr14,
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-01-23 06:20:03
override func viewDidLoad() {
 // your code

 if let nc = self.navigationController {
   yourView.frame.origin.y = nc.navigationBar.frame.origin.y + nc.navigationBar.frame.height
  }
}
 0
Author: wajih,
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
2016-02-25 08:41:33

Oto Swift 2.3. (Xcode 8.0) rozwiązanie. Stworzyłem podklasę UITableView.

class MYCustomTableView: UITableView
{   
    override func drawRect(rect: CGRect) {
        super.drawRect(rect)
        contentInset    = UIEdgeInsetsZero
    }
}

Wstawka zawartości powinna być zawsze zerowa (domyślnie). Ustawiam go ręcznie Zero. Możesz również dodać metodę sprawdzania, która sprawia, że sprawdzanie i jeśli jest to coś innego niż to, co chcesz, aby było, po prostu uzyskaj poprawny rect. Zmiana będzie odzwierciedlać tylko wtedy, gdy zostanie wyświetlony widok tabeli (co nie zdarza się często).

Nie zapomnij zaktualizować TableView w swoim IB (w TableViewController lub po prostu TableView wewnątrz Twojego Viewcontrollera).

 0
Author: Darkwonder,
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
2016-10-06 10:09:43

Miałem do czynienia z tym problemem w ios 11, ale układ był poprawny dla ios 8 - 10.3.3 . W moim przypadku ustawiłem pionowe ograniczenie przestrzeni na Superview.Górny margines zamiast Superview.Top, który działa na ios 8 - 11.

Tutaj wpisz opis obrazka

 0
Author: DareDevil,
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-09-26 19:33:41

Zobacz wszystkie rozwiązania: mój projekt to po prostu użycie xib, więc rozwiązanie z storyboard nie działało dla mnie. siebie.edgesForExtendedLayout = UIRectEdgeNone; działa tylko dla kontrolera, jeśli widoczny jest pasek nawigacyjny. ale jeśli twój widok jest po prostu mieć pasek stanu, to nie będzie działać. więc łączę dwa conditony.

- (void) viewDidLayoutSubviews {
float systemVersion = [[[UIDevice currentDevice] systemVersion] floatValue];
if (systemVersion >= 7.0f) {
    CGRect bounds = self.view.bounds;
    if(self.navigationController == nil || self.navigationController.isNavigationBarHidden == YES){
        bounds.origin.y -= 20.0;
        [self.view setBounds:bounds];
    }
    else{
        self.edgesForExtendedLayout = UIRectEdgeNone;
    }
}

Pomoc To działa.

 -1
Author: phnix,
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-07-04 03:16:00

Jeśli musisz również obsługiwać iOS 6, musisz warunkowo przesunąć go w dół. Oznacza to, że w iOS 7 powinieneś po prostu przesunąć go w dół o 20 punktów (albo poprzez manipulację frame lub za pomocą automatycznego układu), a w iOS 6 zostawiasz go w spokoju. Nie wierzę, że możesz to zrobić w IB, więc musisz to zrobić w kodzie.

EDIT

Możesz to zrobić w IB, używając delt iOS6/IOS7. Ustaw swoją pozycję w systemie iOS 7, a następnie w systemie iOS 6 Ustaw delta Y na-20 punktów. Zobacz to tak pytanie aby uzyskać więcej informacji.

 -2
Author: Scott Berrevoets,
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-05-23 12:26:18