sich - iphone 6 bildschirm drehen funktioniert nicht




In der iOS 7-Tabellenansicht wird der Inhaltseinschub nicht automatisch angepasst (5)

@ Christopher Pickslay Lösung in Swift 2 :

override func viewDidLayoutSubviews() {
    super.viewDidLayoutSubviews()

    let topInset = topLayoutGuide.length
    inTableView.contentInset.top = topInset
    inTableView.contentOffset.y = -topInset
    inTableView.scrollIndicatorInsets.top = topInset
}

Ich übertrage mein Projekt auf iOS7. Ich stehe vor einem seltsamen Problem mit der durchsichtigen Navigationsleiste.

Ich habe einen View-Controller und es hat eine Tabellenansicht als Subview (nennen wir es ControllerA). Ich initiiere einen neuen Uinaktivierungscontroller mit dem Controller A und präsentiere ihn modal mit dem presentviewcontroller. Die vorgestellte View-Controller-Tabellenansicht ist durch die Navigationsleiste gesperrt. Ich habe die AutoAdjustScrollViewInsets automatisch auf YES gesetzt, aber das Ergebnis hat sich nicht geändert. Ich wusste, dass ich die Kanten forExtendedLayout auf UIRectEdgeNone einstellen kann , aber die Navigationsleiste wird dadurch nicht mehr durchsichtig.

Danach habe ich versucht, einen neuen View-Controller zum Testen zu erstellen. Es enthält fast die gleichen Elemente. Aber das Ergebnis ist sehr unterschiedlich. Der Inhalt der Tabellenansicht wird nicht blockiert.

Fazit

  1. Zwei View-Controller passen automatisch an, dass ScrollViewInsets auf YES gesetzt wird
  2. Das Projekt verwendet kein Storyboard
  3. Der erste wird mit Xcode 4.6 erstellt, der zweite wird neu auf Xcode 5 erstellt
  4. Ich habe zwei Klassen Xib und Code verglichen, nicht viel anders

Basierend auf Tonys Antwort war ich in der Lage, dieses Problem programmatisch zu umgehen, indem ich die Tabellenansicht zeitweise nach hinten schickte, die Anpassungen machte und dann die Hintergrundansicht zurück an die Rückseite schickte. In meinem Fall flackert dieses Vorgehen nicht.

Im View Controller:


- (void)viewWillLayoutSubviews {
    [super viewWillLayoutSubviews];

    [self.view sendSubviewToBack:self.tableView];
}

- (void)viewDidLayoutSubviews {
    [super viewDidLayoutSubviews];

    [self.view sendSubviewToBack:self.backgroundView];
}

Wenn andere Untersichten auf self.view vorhanden sind, müssen Sie diese möglicherweise ebenfalls neu anordnen.


Ich habe die Antwort auf Apple Developer Forum gefunden. Es gibt zwei verschiedene Fälle.

Der erste, der View-Controller ist ein UITableViewController. Und das Problem sollte nicht angezeigt werden, da Apple es automatisch auffüllen wird.

Der zweite, der View-Controller, ist KEIN UITableViewController. Und in der View-Hierarchie enthält es eine UITableView. In diesem Fall, wenn UITableview (oder ScrollView) die Hauptansicht von ViewController oder die erste Unteransicht der Hauptansicht ist, wird es funktionieren. Andernfalls weiß der View-Controller nicht, welche Bildlauf-Ansicht für das Auffüllen zuständig ist, und das Problem tritt auf.

In meinem Fall ist der View-Controller der zweite. Und es gibt eine Hintergrundbildansicht als erste Unteransicht der Hauptansicht. Also, es scheitert.

Hier ist der Apple Entwicklerforum-Link (Zugriff auf das Entwicklerkonto erforderlich): https://devforums.apple.com/message/900138#900138


Ja - ein bisschen nervig.

Ich habe eine Feder mit einer einzigen Tabellenansicht innerhalb der Hauptansicht, nicht mit Auto-Layout. Es gibt eine Tableiste, eine Navigationsleiste und eine Statusleiste und die App muss auf 5.0 zurück arbeiten. Im Interface-Generator funktioniert das Ganze "in iOS7 und iOS6.1 nebeneinander" und zeigt die Tabellen passgenau an (sobald die iOS6 / 7-Deltas richtig gesetzt wurden).

Auf einem Gerät oder Simulator gab es jedoch eine große Lücke am oberen Ende der Tabelle, die als Folge eines Inhaltsinsets (das ziemlich genau mit dem vertikalen iOS6 / 7-Delta übereinstimmte) in der Spitze auf Null gesetzt wurde.

Die einzige Lösung, die ich bekam, war in viewWillAppear, um [_tableView setContentInset: UIEdgeInsetsZero] einzufügen.

Ein weiterer hässlicher Hack mit einem schönen Bildschirm-Ergebnis .....


[self.navigationController setNavigationBarHidden:YES animated:YES]; 

im:

- (void)viewDidLoad 




ios7