UITableView width macht mich verrückt

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • UITableView width macht mich verrückt

    Hallo Zusammen,

    ich möchte gerne meine TableView etwas anders gestalten. Also habe ich einen normalen ViewController genommen, eine Tableview reingezogen und per Autolayout an die Ränder geklebt. Selbstverständlich ist der ViewController auch für die Datasource und so weiter verantwortlich. Soweit funktioniert auch alles - nur es sieht blöd aus.

    Die Zellen werden anscheinend noch in Standardgröße gebaut und somit fehlt rechts etwas (Bild).
    Ich dacht mir nun ich muss sie einfach kleiner machen und habe deshalb in der Klasse der Zelle in layoutSubviews mit einer passenden Größe überschrieben.

    C-Quellcode

    1. - (void)layoutSubviews {
    2. [super layoutSubviews];
    3. CGRect cellRect = self.bounds;
    4. cellRect.size.width = self.superview.frame.size.width * 0.9f;
    5. self.bounds = cellRect;
    6. NSLog(@"superview width: %f", self.superview.frame.size.width); // = tableview 343
    7. NSLog(@"cell frame: %f %f %f %f", self.bounds.origin.x, self.bounds.origin.y, self.bounds.size.width, self.bounds.size.height);
    8. }
    Nun ist die Zelle zwar kleiner - aber immer noch nicht mittig. Sie bleibt nach rechts "verschoben" (Bild width * 0.9). Außerdem bringt das Autolayout anscheinend durcheinander, da nun rechts sogar die Hälfte vom Label fehlt.


    Wo ist mein Denkfehler?

    Danke und schöne Grüße.
    Dateien
    • Bild 1.png

      (57,3 kB, 661 mal heruntergeladen, zuletzt: )
    • Storyboard.png

      (184,04 kB, 443 mal heruntergeladen, zuletzt: )
    • width * 0.9.png

      (47,7 kB, 460 mal heruntergeladen, zuletzt: )
  • Ich will gar keine schmaleren Zellen. Ich möchte Zellen die an die schmalere Breite der TableView angepasst sind. Eigentlich hätte ich auch erwartet, dass das automatisch funktioniert.

    Wie würdest du vorgehen, wenn du den Look von Bild 1 haben möchtest (nur eben mit Zellen die nach rechts und links den gleichen abstand haben) ?
  • matz schrieb:

    MCDan schrieb:

    Du musst den TableView doch einfach nur mit dem gewünschten Rand nach rechts und links im View positionieren und per Autolayout Constraints entsprechend fixieren.

    Ich verstehe ehrlich gesagt nicht ganz, wo das Problem hierbei liegt?
    Dito, aber das liegt am Points-Label, nicht an der TableView selbst ;)

    Nein, das Problem liegt nicht am Points Label. Es liegt darin, dass die Zelle zu breit ist. Das ist sie auch wenn ich eine plain UITableViewCell nehme. Die Constraints der tableView sind im Storyboard Screenshot sichtbar und auch meiner Sicht auch gut so. Wenn ihr euch Bild1 anschaut - die TableView ist optimal positioniert. Bei Bild1 ist auch nix im layoutSubviews gedreht.
  • Ich versuche es mit folgendem Screenshot nochmal deutlicher zu machen, was mich stört.
    Mich stört nicht:
    - die Position der Tableview an sich
    - die Position der Label

    mich stört dieser kleine blöde Strich der TableViewCell der rechts zu weit geht. Daher habe ich vermutete, dass die Zelle an sich zu breit ist.
    Dateien
  • Kann es sein dass das gar kein Fehler ist sondern einfach das default Design der seperator?
    (Siehe Apple Standard Apps: Settings, Contacts)

    Um dein Ergebnis hinzubekommen müsste du den seperator wohl ausblenden und mit einer eigenen 1pt hohen view in der Zelle selbst arbeiten.

    Vielleicht hilft das :)
  • H1990 schrieb:

    Kann es sein dass das gar kein Fehler ist sondern einfach das default Design der seperator?
    (Siehe Apple Standard Apps: Settings, Contacts)

    Um dein Ergebnis hinzubekommen müsste du den seperator wohl ausblenden und mit einer eigenen 1pt hohen view in der Zelle selbst arbeiten.

    Vielleicht hilft das :)
    Das klingt aber sehr nach Webdesigner.

    Man kann ja auch einfach selbst einen Strich malen.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Amin Negm-Awad schrieb:

    H1990 schrieb:

    Kann es sein dass das gar kein Fehler ist sondern einfach das default Design der seperator?
    (Siehe Apple Standard Apps: Settings, Contacts)

    Um dein Ergebnis hinzubekommen müsste du den seperator wohl ausblenden und mit einer eigenen 1pt hohen view in der Zelle selbst arbeiten.

    Vielleicht hilft das :)
    Das klingt aber sehr nach Webdesigner.
    Man kann ja auch einfach selbst einen Strich malen.
    Aber nicht im IB ;)

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • H1990 schrieb:

    Kann es sein dass das gar kein Fehler ist sondern einfach das default Design der seperator?
    (Siehe Apple Standard Apps: Settings, Contacts)

    Um dein Ergebnis hinzubekommen müsste du den seperator wohl ausblenden und mit einer eigenen 1pt hohen view in der Zelle selbst arbeiten.

    Vielleicht hilft das :)
    Man kann einfach über die Property separatorInset den gewünschten Wert einstellen. Sollte auch im Interface Editor gehen.
  • H1990 schrieb:

    Kann es sein dass das gar kein Fehler ist sondern einfach das default Design der seperator?
    (Siehe Apple Standard Apps: Settings, Contacts)

    Um dein Ergebnis hinzubekommen müsste du den seperator wohl ausblenden und mit einer eigenen 1pt hohen view in der Zelle selbst arbeiten.

    Vielleicht hilft das :)
    OMG,

    das ist es wirklich. Da habe ich echt ein Phantom gejagt. Für mich war das so unharmonisch, dass ich mich nicht vorstellen konnte, dass es der Standard ist.
    Vielen Dank an alle und besonders auch an Michael für den Hinweis zum separatorInset property.
  • Amin Negm-Awad schrieb:

    H1990 schrieb:

    Kann es sein dass das gar kein Fehler ist sondern einfach das default Design der seperator?
    (Siehe Apple Standard Apps: Settings, Contacts)

    Um dein Ergebnis hinzubekommen müsste du den seperator wohl ausblenden und mit einer eigenen 1pt hohen view in der Zelle selbst arbeiten.

    Vielleicht hilft das :)
    Das klingt aber sehr nach Webdesigner.
    Man kann ja auch einfach selbst einen Strich malen.
    Hehe ja auch Webdesigner. :)

    Das mit der view war in dem Moment in Verbindung mit den constraints das einfachste.
    Gut zu wissen mit dem inset.