Индикатор активности не в центре подвида (который отличается по размеру от parentview)

#objective-c #cocoa-touch #ios #uiactivityindicatorview

#objective-c #cocoa-touch #iOS #uiactivityindicatorview

Вопрос:

Я пытаюсь центрировать счетчик в середине страницы, используя приведенный ниже код.

 self.aSpinner.center = self.view.center;
  

Однако, когда я запускаю программу, счетчик, кажется, не находится в центре

Снимок экрана симулятора iPad; индикатор активности на пустом виде справа от центра

Есть ли какой-нибудь способ это исправить?

Редактировать:

Я нашел проблему. Дело не в том, что счетчик не находится в центре, просто вместо этого подвидо имеет границы, отличные от его супервизора.

Скриншот симулятора iPad; вид с вложенными представлениями и индикатором активности справа от центра

Я делаю что-то подобное в своем коде:

 self.navcon = [[UINavigationController alloc]init];
self.photoViewTable = [[PhotoTableViewController alloc]init];
self.loadingPage = [[LoadingPageViewController alloc]init];

[self.photoViewTable.view addSubview:loadingPage.view];

[navcon pushViewController:photoViewTable animated:NO];
[self.window addSubview:navcon.view];
  

Как я могу установить размер loadingPage представления равным родительскому представлению?

Комментарии:

1. Вы уверены, что ваше представление расположено по центру? Можете ли вы предоставить еще какой-нибудь контекст кода?

Ответ №1:

 [spinner setCenter:CGPointMake(kScreenWidth/2.0, kScreenHeight/2.0)];
  

Ответ №2:

Настройки свойств центра может быть недостаточно. В случае изменения размера вашего фрейма я также установлю маску автоматического изменения размера для вида spinner:

 spinner.autoresizingMask = (UIViewAutoresizingFlexibleLeftMargin |
                                              UIViewAutoresizingFlexibleRightMargin |
                                              UIViewAutoresizingFlexibleTopMargin |
                                              UIViewAutoresizingFlexibleBottomMargin);
spinner.center = CGPointMake(CGRectGetWidth(self.view.bounds)/2, CGRectGetHeight(self.view.bounds)/2);
  

Ответ №3:

Попробуйте сделать это в viewDidAppear, там правильные self.границы просмотра, я не проверяю self.center.

 self.aSpinner.center = CGPointMake(self.view.bounds.width/2.0, self.view.bounds.width/2.0)
  

Работает правильно!
Проверьте, имеет ли self вид или self является view