Uważam, że brakującą koncepcją jest to, że ramka widoku (i jego środek) są związane z jego widokiem. Na podstawie zrzutu ekranu domyślam się, że twoje pola tekstowe i przyciski są w widoku, który działa jako kontener. Tak więc środek ramki twojego przycisku jest związany z tym widokiem kontenera, a nie z widokiem kontrolera widoku jako całości. Przypisujesz tę samą ramkę centrum do centrum aktywności, ale dodajesz wskaźnik jako widok główny widoku głównego, a nie widok kontenera. Masz teraz dwa widoki (przycisk i wskaźnik) z tą samą ramką, ale ta ramka jest powiązana z dwoma różnymi widokami.
Najprostszą zmianą byłoby dodanie wskaźnika do widoku kontenera, którego używasz. Ale sugerowałbym dodanie wskaźnika jako podglądu przycisku, a następnie zrób trochę matematyki, aby poprawić jego pozycję.
UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
CGFloat halfButtonHeight = btnLogin.bounds.size.height/2;
CGFloat buttonWidth = btnLogin.bounds.size.width;
indicator.center = CGPointMake(buttonWidth - halfButtonHeight , halfButtonHeight);
[btnLogin addSubview:indicator];
[indicator startAnimating];
Uwaga: Twoje ustawienie środka widoku tuż za ramką widoku jest zbędne. Ponadto ostatni widok dodany jako widok podrzędny jest automatycznie przednim podglądem.
Ktoś? Naprawdę nie chwytam pozycjonowania w systemie iOS. –