Problem mit Auto Layout und NSTableView

  • Problem mit Auto Layout und NSTableView

    Hallo zusammen,

    ich hab ein Problem mit Auto Layout und NSTableView, vielleicht kann mir jemand helfen..

    Folgender, sehr simpler Versuchsaufbau:

    Neues OS X - Cocoa - Projekt unter XCode 4.6, dort ins XIB, Auto Layout ist an. Aus der Objektbibliothek eine NSTableView ins Hauptfenster ziehen. Diese Tabelle nun so groß ziehen, dass sie von allen Rändern des umgebenden Fensters genau den Standard-Abstand hat. Das wars schon.

    Nun über Editor -> Simulate Document oder den Start des Programms das Fenster auf den Bildschirm bringen. Wenn ich dieses Fenster in der rechten unteren Ecke anfasse, kann ich es horizontal UND vertikal groß und klein ziehen (allerdings gibt es manchmal ein paar 'glitches', z.B. verlässt der Mauspfeil manchmal seinen "Griff" an der Fensterecke).

    Wenn ich das Fenster jedoch an seinem unteren Rand anfasse, dann kann ich es vertikal nur noch einen Millimeter kleiner ziehen - größer ist kein Problem. Ziehe ich es an der Ecke auf eine beliebige vertikale Größe, ist dies die (fast) minimale Größe für das größer/kleiner mit Griff an der unteren Kante.

    Dies Verhalten ist mir unverständlich, aber der Versuchsaufbau ist so einfach, dass ich mir nicht vorstellen kann, dass es sich um einen Bug handelt, also hab ich wohl was nicht richtig verstanden.

    Ich habe mir die 2012er-WWDC-Videos zum Thema Auto Layout angesehen und noch einiges mehr. Mir klingt der Satz im Ohr, dass wenn die GUI unter Auto Layout seltsame Dinge tut und 'glitches' hat, dass dann die Auto-Layout Constraints unterspezifiziert sind. Allerdings wird auch gesagt, dass das im Interface Builder nicht passieren kann, weil dort eigenständige IB-Constraint eingefügt werden, sollten die Benutzer-Constraints nicht ausreichen um Position und Größe eines jeden Controls eindeutig festzulegen.

    Wenn ich Auto Layout abschalte und in 'Springs & Struts' alles anschalte (= klebt an allen Rändern und vergrößert sich in beide Richtungen), dann funktioniert alles perfekt. Schalte ich dann wieder nach Auto Layout um, tritt auch wieder beschriebenes Problem auf. Aber ich würde wirklich sehr gerne Auto Layout für die GUI benutzen.

    Vielleicht liegt es an den Controls, aus denen die Tabelle zusammengesetzt ist, vieleicht muss ich etwas an den Hugging- oder Compression-Resistance-Prioritäten eines inneren Controls verändern oder vielleicht muss ich sogar programmatisch ran und irgendwelche Eigenschaften ändern.. Ich hab schon alles mögliche probiert, aber leider bisher ohne Erfolg. Das Problem tritt übrigens auch auf, wenn die Tabelle gefüllt und verdrahtet ist..

    Falls jemand von euch eine Idee hat.. ?

    Kurz zu mir: Ich programmiere schon ziemlich lange, bin aber neu bei Objective C und auch neu in diesem Forum, also Gruß an alle die dies lesen :)
  • Ich habe es gerade auf einem MacBookPro nochmal getestet, allerdings auch schon Mountain Lion, dort gibt es dasselbe Problem, also liegt's wohl nicht an meinem iMac.

    Es kann sein, dass das Problem erst ab Mountain Lion auftritt (ich entwickle unter 10.8.2). Wenn es unter 10.7.5 noch nicht auftritt und kein Denkfehler vorliegt, dann klingt das nach einem Bug..

    Auch wenn ich unter 10.8.2 als Deployment-Target 10.7 wähle, tritt das Problem auf..
  • Jepp, habe es gerade auch mal unter OS X 10.8 getestet. Sobald man das Fenster am oberen oder unteren Rand anfasst und versucht das Fenster in der Höhe zu verkleinern geht dies nur für ein paar Pixel und dann bleibt die Verkleinerung hängen.

    Man man man, anstatt fleißig an neuen Features für 10.9 zu arbeiten und weitere neue Fehler für 10.9 einzubauen, sollte Apple lieber mal die Bugs in 10.8 beheben. :(
  • Markus Müller schrieb:

    Kannst Du das Projekt posten?
    Das Projekt, das MCDan gepostet hat, hat bei mir genau den beschriebenen Effekt.

    Ich habe es bei mir - wie im Projekt ja auch verzeichnet - mit Deployment-Target 10.7 gebuildet und hänge das Ergebnis hier mal an.

    Interessant wäre, ob mein Problem jetzt mit in die App compiliert wurde, es also am Compiler oder Buildprozess liegt, oder ob das Problem bei mir erst auftritt, wenn ich die App ausführe, dann wäre OSX schuld.

    @MCDan: Alternativ könntest du vielleicht dein Kompilat, deine App posten, dann würde ich es bei mir mal ausprobieren..
  • MCDan schrieb:

    Jepp, habe es gerade auch mal unter OS X 10.8 getestet. Sobald man das Fenster am oberen oder unteren Rand anfasst und versucht das Fenster in der Höhe zu verkleinern geht dies nur für ein paar Pixel und dann bleibt die Verkleinerung hängen.

    Man man man, anstatt fleißig an neuen Features für 10.9 zu arbeiten und weitere neue Fehler für 10.9 einzubauen, sollte Apple lieber mal die Bugs in 10.8 beheben. :(

    Alles klar, wenn es bei dir reproduzierbar ist, dann handelt es sich also um einen Bug. Dann werde ich wohl vorerst auf Auto Layout verzichten.

    Vielen Dank jedenfalls @MCDan für's ausprobieren.