2012-07-20 21 views
5

Gelöst: Überprüfen Sie unten für die Lösung für mein Problem.Wie zentriert man UIActivityIndicator?

enter image description here

Hey SO,

Ich habe Probleme mit dem UIActivityIndicator in der Mitte der Ansicht Zentrierung. Wie Sie hier sehen können, ist es vertikal etwas tiefer, als es sein sollte. Was ich habe, ist eine UIScrollView, die später eine UIImage Unteransicht hinzufügt. Bevor der UIImage lädt, habe ich diesen UIActivityIndicator, um anzuzeigen, dass das Bild geladen wird.

Irgendwelche Ideen, wie ich das Zentrum CGPoint bekommen und den UIActivityIndicator dort setzen könnte? Ich bin mir nicht sicher, warum self.view.center nicht funktioniert.

Vielen Dank im Voraus.

EDIT: Ich musste die Höhe der Navigationsleiste und der Tab-Leiste berücksichtigen. Der Code musste ich hinzufügen, war:

float navigationBarHeight = [[self.navigationController navigationBar] frame].size.height; 
float tabBarHeight = [[[super tabBarController] tabBar] frame].size.height; 
spinner.center = CGPointMake(self.view.frame.size.width/2.0, (self.view.frame.size.height - navigationBarHeight - tabBarHeight)/2.0); 

enter image description here

Antwort

6

Zwei Probleme:

  1. Zuerst self.view.center ist das Zentrum des Rahmens der aktuellen Ansicht auf es ist Rahmen der Eltern. Wenn Sie die Mitte der aktuellen Ansicht möchten, möchten Sie CGPointMake(self.view.frame.size.width/2.0, self.view.frame.size.height/2.0);

  2. Zweitens enthält Ihre aktuelle Ansicht nicht die Navigationsleiste, so dass Sie es auf den Raum des Bildschirms unter der Navigationsleiste zentrieren. Das wird es auch niedriger aussehen lassen.

+0

Danke @Robert Ryan! Nachdem ich Ihre zwei Hinweise losgeworden bin, konnte ich es richtig funktionieren lassen. Ich musste die Höhe der Navigationsleiste und der Tableiste finden, um die richtige Höhe zu erhalten. Ich habe den Code zu meinem ursprünglichen Post hinzugefügt. – kkSlider

2

Ich bin mir nicht sicher, was genau los ist, aber vielleicht Ihre UIScrollView ist größer als der Bildschirm? Sie könnten versuchen, die Größe Ihrer UIView zu drucken, um zu bestimmen, ob sie sich in den Bildschirmgrenzen befindet. Vielleicht befindet sich der UIActivityIndicator in der Mitte der UIView (nicht in der Mitte des Bildschirms).

+0

Wäre nicht das Zentrum der Grenzen des UIView das gleiche sein wie die Mitte des Bildschirms? – kkSlider

+0

NSLog gab mir, dass sowohl Self.view als auch self.scrollViews CGRect {{0, 0}, {320, 460}} ist. Und self.view.center druckt korrekt (160, 230).Nicht sicher, was hier falsch ist. – kkSlider

3

Verwenden Sie spinner.center = self.scrollView.center; stattdessen

versuchen, dieses

spinner.center = CGPointMake (CGRectGetMidX (self.bounds), CGRectGetMidY (self.bounds));

+0

Danke, aber ich habe das schon ausprobiert und die gleichen Ergebnisse erzielt. – kkSlider

4

SWIFT

ich wegen einer Navigationsleiste und eine Tab-Leiste das gleiche Problem hatte. Um dies zu beheben, legen Sie den folgenden Code in Ihrem Loadview() oder wo auch immer Sie Ihre Aktivitätsanzeige rufen beginnen Animieren:

let navigationBarHeight = self.navigationController?.navigationBar.frame.height 
let tabBarHeight = super.tabBarController!.tabBar.frame.height 
YourActivityIndicator.center = CGPointMake(self.view.frame.size.width/2.0, (self.view.frame.size.height - navigationBarHeight! - tabBarHeight)/2.0) 
0

Set Zentrum in viewDidLayoutSubviews.

- (void) viewDidLayoutSubviews { 

self.myActivityIndicator.center = self.view.center;  

}