iOS 7 - navigationController setzt contentInset und ContentOffset von UIScrollView


Answers

Ich hatte ein ähnliches Problem, nachdem ich einen ViewController entlassen hatte, wurde der ContentOffset von meiner TableView auf (0, -64) geändert.

Meine Lösung war etwas komisch, ich habe alle anderen Antworten ausprobiert, hatte aber keinen Erfolg, das einzige Problem, das mein Problem behob, war, die Position von tableView im Steuerbaum der .xib zu wechseln

Es war das erste Steuerelement in der Elternansicht wie folgt:

Ich habe das TableView direkt nach dem ImageView verschoben und es hat funktioniert:

es scheint, dass das Anordnen der Tabellenansicht in der ersten Position das Problem verursachte und das Verschieben der Tabellenansicht an eine andere Position das Problem behob.

PD Ich benutze weder AutoLayout noch Storyboards

hoffe das kann jemandem helfen!

Question

Ich habe eine UIScrollView (eigentlich eine UICollectionView, aber das ist wahrscheinlich egal). Wenn es in IOS 7 erscheint, setzt der Navigationscontroller seine Werte contentInset und contentOffset auf Werte, die ich nicht haben möchte. Es scheint zu versuchen, die Statusleiste und die Navigationsleiste anzupassen. Ich würde es sehr bevorzugen, wenn es sie alleine lassen würde. Ich habe dies behoben, indem ich die Getter- und Setter-Methoden für contentInset und contentOffset mit einem Flag überschrieben habe, um dem Objekt mitzuteilen, ob es einen Satz akzeptieren soll oder nicht. Aber gibt es einen besseren Weg?




Dies behebt das Problem in beiden Fällen, wenn:

  1. Zeigt die Statusleiste an
  2. Statusleiste + Navigationsleiste anzeigen

    override func viewDidLayoutSubviews() {
            NSLog("ORIGIN: \(self.view.frame.origin.y)")
    
        if self.view.frame.origin.y == 0 {
            if let rect = self.navigationController?.navigationBar.frame {
                let y = rect.size.height + rect.origin.y
                self.tableView.contentInset = UIEdgeInsetsMake(y, 0, 0, 0)
            }
        } else if self.view.frame.origin.y == 44 || self.view.frame.origin.y == 64 {
            self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0)
        }
    }
    



Ich habe das gleiche Problem.

  1. Das Einstellen von self.automaticallyAdjustsScrollViewInsets = NO löste das Problem für einige der Ansichten, aber nicht überall.

  2. Die zweite Lösung besteht darin, den Inhalt-Offset von tableview / view / scrollview in viewWillLayoutSubviews zu setzen:

    - (void)viewWillLayoutSubviews {
        //Arrange the view
        CGRect tempViewFrame = self.view.frame;
    
        if (tempViewFrame.origin.y == 64.0f) {
            tempViewFrame.origin.y = 0;
            self.view.frame = tempViewFrame;
        }
    }
    





Related