Die auf NSSsplitViewController basierende Anwendung wird fast nie mit der richtigen Größe gestartet

7

Ich habe diese App, die ein NSSplitViewController als Root verwendet und ein NSTabViewController als detailViewController verbunden hat.

Diese App wird mit 1024 x 768 gestartet. Der linke Bereich sollte bei 320x768 und der rechte Bereich (wo der tabViewController ist) bei 704x768 starten.

Ab 10 Mal starte ich diese App, 9 Mal wird sie mit der falschen Größe gestartet (ca. 500x500). Andere seltsame Sache ist, dass diese App nicht skalierbar sein sollte, aber wenn Sie die Maus in der Nähe des Fensterrahmens bewegen, sehen Sie eine Cursor-Anzeige zum Skalieren.

Ich möchte, dass es in der richtigen Größe startet und keine skalierbare Option hat.

Diese beiden Einstellungen sind im Interface Builder enthalten, werden aber ignoriert.

Sie können hier ein Beispielprojekt herunterladen, das das Problem veranschaulicht, hier . Stoppen und führen Sie das Projekt mehrmals aus, um das Problem zu sehen.

Wie löse ich das?

    
SpaceDog 28.01.2015, 10:34
quelle

1 Antwort

19

Ich kann nicht sicher sagen, was das Problem verursacht, aber eine Möglichkeit, es zu lösen, ist, einige Einschränkungen hinzuzufügen. Mit dem Interface Builder können Sie die Standard-NSView-Instanzen, die in das linke und das rechte Fenster der geteilten Ansicht eingefügt werden, nicht einschränken. Daher müssen Sie Ihre eigenen hinzufügen. Der Screenshot unten wird von deiner Demo genommen, aber nachdem ich folgendes gemacht habe:

  1. Eine Teilansicht wurde zum linken Teilbereich ( Meine Inhaltsansicht ) hinzugefügt und die Kanten an den Rändern der Superansicht angeheftet (die Ansicht Xcode wird automatisch zur Teilansicht hinzugefügt)
  2. Zu Meine Inhaltsansicht wurde eine explizite Breitenbeschränkung von 320 Pixeln hinzugefügt

Wenn ich die App lade, sind beide Splits sichtbar, der Teiler bewegt sich nicht und das Fenster kann nicht verkleinert werden.

Update - eine bessere Lösung

Obwohl Einschränkungen eine Möglichkeit darstellen, dieses Problem zu lösen, liegt der Grund des Problems in etwas unerwartetem Verhalten im Interface Builder. Wenn Sie ein Objekt NSSplitViewController auf die Zeichenfläche ziehen und es zum Ziel der Beziehung content window des Fenster-Controllers machen, wird der view outlet des Split-View-Controllers nicht tatsächlich gesetzt. Eine Konsequenz davon scheint zu sein, dass, wenn Sie die App laden, der Teiler direkt auf einer Seite erscheint. Um dies zu beheben, setzen Sie den oben genannten View-Ausgang so, dass er auf die Split-Ansicht zeigt:

Ich habe ein Demo-Projekt mit einem Setup erstellt, das dem in der Demo-App des Fragestellers ähnelt.

    
Paul Patterson 28.01.2015, 11:05
quelle