Wie füge ich zwei Buttons und ein Label in einer Zeile zusammen? - ios, objective-c, Benutzerschnittstelle, uibutton

Ich habe eine benutzerdefinierte UITableViewCell als dies:

Bildbeschreibung hier eingeben

name und event sind zwei Tasten. Der Name der Schaltflächen wird dynamisch im Code wie folgt zugewiesen:

[cell.newsEventName setTitle:event[@"name"] forState:UIControlStateNormal];
[cell.newsEventName setTitleColor:[UIColor colorWithRed:0.0 green:122.0/255.0 blue:1.0 alpha:1.0] forState:UIControlStateNormal];

Manchmal sind diese Namen zu lang und manchmal zu kurz. Wie kann ich sie dynamisch in eine Zeile setzen, um dies zu vermeiden:

Bildbeschreibung hier eingeben

Wenn ich Knöpfe zeichne, die zu groß sind, um Punkte zu vermeiden, dann habe ich für kurze Namen so viel freien Platz übrig. Wie kann ich sie gut unter diesen Bedingungen platzieren?

Antworten:

1 für die Antwort № 1

Verwenden Sie Einschränkungen? Für das Etikett, das vergrößert / verkleinert wird, können Sie die Inhaltsbeschränkung höher festlegen und es wird immer größer.

Wenn Sie keine Constraints verwenden, können Sie die Größe anpassen oder die Größe dynamisch ändern, wenn das Layout der Zelle verwendet wird


1 für die Antwort № 2

Sie können eine UIStackView verwenden.Dadurch können Sie die Schaltflächen dynamisch skalieren. In diesem Fall sind Sie jedoch nur mit iOS 9 kompatibel. Sie können eine Stapelansicht genauso hinzufügen, wie Sie ein beliebiges anderes Element im Schnittstellen-Generator hinzufügen.


1 für die Antwort № 3

Haben Sie AutoLayout versucht?Probieren Sie AutoLayout in Ihrer benutzerdefinierten Zelle aus, um Positionen von Unteransichten in einer Zelle zu fixieren. Anstatt die Breite der Schaltfläche festzulegen, geben Sie ihre Position in der Zelle an. Hoffe das löst dein Problem. Sie können diesen Link beziehen http://www.raywenderlich.com/73602/dynamic-table-view-cell-height-auto-layout.


0 für die Antwort № 4

Lassen Sie es in 3 Schritte zerlegen

  • A: Finden Sie die erforderliche Größe für den Namen

    CGSize sizeMax = CGSizeMake(cell.frame.size.width, FLT_MAX);
    CGSize sizeExpected = [stringName sizeWithFont:buttonName.titleLabel.font
    constrainedToSize:maximumLabelSize
    lineBreakMode:NSLineBreakByWordWrapping];
    float buttonWidth = sizeExpected.width;
    
  • B: setze die Breite des Knopfes (mit Namen)

    CGRect r1 = cell.newsEventName.frame;
    cell.newsEventName setFrame:CGRectMake(r1.origin.x, r1.origin.y, buttonWidth, r1.size.height);
    
  • C: Legen Sie die Breite des Etiketts fest

    CGRect r2 = cell.newsEventLabel.frame;
    cell.newsEventLabel setFrame:CGRectMake(r1.origin.x+buttonWidth, r2.origin.y, r2.size.width, r2.size.height);
    

Verwandte Fragen
Speisekarte