webentwicklung-frage-antwort-db.com.de

So zentrieren Sie ein UILabel auf UIView

Wie kann ich das UILabel auf dem UIView zentrieren? Ich benutze den folgenden Code

float width = weatherView.bounds.size.width; 
float height = weatherView.bounds.size.height; 

[self.label setFrame:CGRectMake(width-100,height-100, 100, 100)];
38
john doe

Wie wäre es mit:

[self.label setCenter:view.center];
102
PengOne

Wenn das Etikett eine Unteransicht der Ansicht ist:

[self.label setCenter:CGPointMake(view.frame.size.width / 2, view.frame.size.height / 2)]

Benutze nicht view.center, es sei denn, die Beschriftung und die Ansicht haben dieselbe Übersicht.

Wenn keine unmittelbare Verbindung besteht, müssen Sie die Mitte der Ansicht in den Koordinatenraum des übergeordneten Etiketts umwandeln. Dann könnten Sie PengOnes Antwort mit dem transformierten Punkt verwenden.

35
Nashenas

Verwenden Sie NSTextAlignmentCenter, wenn die Beschriftung bereits festgelegt ist und Sie den Inhalt zentrieren möchten.

cell.menuLabel.textAlignment = NSTextAlignmentCenter;
20
Alex Delgado

Eine besser mögliche Lösung ist:

First: Wenn Sie dies programmgesteuert tun, müssen Sie mit Frame und einigen Anpassungen initialisieren:

// Simple example
int yPosition = 10;
UILabel *label = [[UILabel alloc] initWithFrame: CGRectMake(0, yPosition, self.view.frame.size.width, 0)];
[label setText: @"Testing..."];
[label setBackgroundColor: [UIColor clearColor]];
[label setNumberOfLines: 0];
[label sizeToFit];

Zweitens: Wenn Sie eine Beschriftung zentrieren möchten, können Sie diese einfach ausführen, nachdem der Selektor setNumberOflines aufgerufen und 0 value Zugewiesen wurde. Ihr Text enthält alle erforderlichen Zeilen und Die Methode sizeToFit wurde aufgerufen, um eine gute Anpassung zu erhalten.

[self.label setCenter: CGPointMake(self.view.center.x, self.label.center.y)];

Dadurch wird only the X axis Zentriert und Y axis Bleibt in der Frame-Initialisierung wie gewünscht.

PS: Es ist auch gültig, wenn kein UILabel, sondern abhängig von dem verwendeten Steuerelement, eine weitere einfache Anpassung oder auch keine erforderlich ist und Sie nur programmgesteuert zentrieren möchten, jedoch interface builder entworfen, muss nur der second code ausgeführt werden.

16
rokimoki

Die Antwort von PengOne/Alex Lockwood ist einfach und nützlich. Wenn Sie die Rotation unterstützen möchten, fügen Sie Folgendes hinzu, um die Zentrierung beizubehalten:

[self.myLabel setAutoresizingMask:UIViewAutoresizingFlexibleLeftMargin | UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleWidth];
2
DenVog

Es gibt zwei Möglichkeiten, wenn Ihr UILabel über .xib oder programmgesteuert hinzugefügt wird.

Wenn der erste Fall über .xib hinzugefügt wurde, können Sie die Position auf der Registerkarte "xib-Dateigrößeninspektor" mit der Eigenschaft "Anordnen" festlegen

Und wenn der zweite Fall weiterhin besteht, können Sie Folgendes festlegen: --- [self.label setCenter: view.center];

2
Nijar

So etwas sollte den Trick machen ... Stellen Sie sicher, dass Ihre Beschriftung zentriert ausgerichtet und ausreichend groß/breit ist, um Ihre Textzeichenfolge zu verarbeiten.

float viewWidth = weatherView.frame.size.width;
float viewHeight = weatherView.frame.size.height;
float labelWidth = label.frame.size.width;
float labelHeight = label.frame.size.height;

float xpos = (viewWidth/2.0f) - (labelWidth/2.0f);
float ypos = (viewHeight/2.0f) - (labelHeight/2.0f);

[label setFrame:CGRectMake(xpos,ypos,labelWidth,labelHeight)];

Ich denke, das sollte das tun, wonach du fragst.

2
Richard Baxter