0

Я строю статью, читающую приложение. Я реализовал UIActivityViewController в UITableViewController программным способом. Я столкнулся с проблемой, когда я меняю ориентацию устройства, изменилось положение UIActivityViewController.Позиция UIActivityViewController изменилась при изменении ориентации устройства?

Это мой код:

 indicator = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; 
     if (UIDeviceOrientationIsLandscape([UIDevice currentDevice].orientation)) 
     { 
      indicator.center = CGPointMake(350, 300); 
      [self.tableView addSubview:indicator]; 
      [UIApplication sharedApplication].networkActivityIndicatorVisible = TRUE; 
      [indicator layoutIfNeeded]; 
      } 

    else{ 

      indicator.center = CGPointMake(200, 400); 
      [self.tableView addSubview:indicator]; 
      [UIApplication sharedApplication].networkActivityIndicatorVisible = TRUE; 

     } 

Если возможно путем применения ограничений программно, как я могу это сделать.

Помощь приветствуется!

ответ

0

Возможно, у вас есть indicator.center = self.tableview.center и позвоните по телефону [self.view layoutIfNeeded]. В любом случае, я только что заметил что-то странное. Вы делаете [self.view addSubview:indicator], но тогда вы делаете [indicator bringSubviewToFront:self.view], я на самом деле не помню, как это могло бы быть (возможно, ничего), но должно быть наоборот, потому что индикатор является subview вашего self.view. Кроме того, почему вы добавляете индикатор дважды (один раз для tableView и один раз для просмотра) в тело оператора else?

EDIT:

Или вы могли бы использовать Autolayout и забыть о кадрах. Что-то вроде этого:

NSLayoutConstraint *centerX = [NSLayoutConstraint constraintWithItem:indicator 
                   attribute:NSLayoutAttributeCenterX 
                   relatedBy:NSLayoutRelationEqual 
                   toItem:self.tableView 
                   attribute:NSLayoutAttributeCenterX 
                  multiplier:1 
                   constant:0]; 
[self.view addConstraint:centerX]; 

И сделайте то же самое для centerY.

+0

@thanks Dan я редактировал свой код выше [self.view layoutIfNeeded] это не дают никакого эффекта.. – Daljeet

+0

Было бы хорошо знать, где находится ваш код. Потому что я не вижу, как он может реагировать на изменение ориентации. Вы решаете, какой центр применять только один раз, когда вы создаете индикатор и добавляете его в иерархию представлений. До iOS 7 вы могли бы использовать 'didRotateFromInterfaceOrientation:' на iOS 8 это устарело, и вы должны использовать 'viewWillTransitionToSize: withTransitionCoordinator:' –

0

Похоже, что вы устанавливаете позицию объекта ActivityIndicator, когда он впервые создан и добавлен в иерархию представлений. Но вы не обновляете эту позицию при вращении.

Вы можете получить это обновление, используя либо ограничения (ограничение по центру X и по центру), как указано здесь другим ответчиком, либо переопределить layoutSubviews и установить центральную точку объекта ActivityIndicator в центр tableView.

Что-то вроде:

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    self.activityIndicatorView.center = self.tableView.center; 
} 
Смежные вопросы