Agregue una UIProgressView bajo el controller de navigation

Esto parece similar a esta pregunta ( Mostrar una UIProgressView dentro o encima de una UINavigationBar de UINavigationController ) pero no puedo get la respuesta allí para que funcione para mí sin que Xcode arroje un error horrible.

Tengo un problema similar, pero quiero agregar la barra de progreso en la vista maestra de un controller de vista dividida, por lo que es una vista de tabla, pero el código dado en la respuesta anterior no funciona (no tengo acceso a la barra de navigation de la misma manera.

He intentado volver a trabajar como tal:

UIProgressView *progress = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleDefault];; [progress setTranslatesAutoresizingMaskIntoConstraints:NO]; [self.navigationController.navigationBar addSubview:progress]; 

Lo cual casi funciona, pero lo agrega por encima de la vista y no por debajo ni por la mitad del ancho (molesto). Puedo hacer esto en el guión gráfico, pero cuando presiono dinámicamente una nueva vista de tabla en la stack de navigation, desaparece de nuevo.

Estoy apuntando para esto:

Progressview debajo de Nav

¡Gracias por cualquier ayuda!

 override func viewDidLoad() { super.viewDidLoad() // if VC is pushed in a navigation controller I add a progress bar if let navigationVC = self.navigationController { // create progress bar with .bar style and add it as subview let progressBar = UIProgressView(progressViewStyle: .Bar) navigationVC.navigationBar.addSubview(progressBar) // create constraints // NOTE: bottom constraint has 1 as constant value instead of 0; this way the progress bar will look like the one in Safari let bottomConstraint = NSLayoutConstraint(item: navigationVC.navigationBar, attribute: .Bottom, relatedBy: .Equal, toItem: progressBar, attribute: .Bottom, multiplier: 1, constant: 1) let leftConstraint = NSLayoutConstraint(item: navigationVC.navigationBar, attribute: .Leading, relatedBy: .Equal, toItem: progressBar, attribute: .Leading, multiplier: 1, constant: 0) let rightConstraint = NSLayoutConstraint(item: navigationVC.navigationBar, attribute: .Trailing, relatedBy: .Equal, toItem: progressBar, attribute: .Trailing, multiplier: 1, constant: 0) // add constraints progressBar.translatesAutoresizingMaskIntoConstraints = false navigationVC.view.addConstraints([bottomConstraint, leftConstraint, rightConstraint]) } } 

Esta técnica funciona bien para mí. Además de agregarlo a la barra de navigation, agregue una restricción que lo mantenga a 0,5 o 1 píxel por encima de la parte inferior y lo coloque en los lados izquierdo y derecho. Luego también funciona en paisaje.

En mi caso, utilicé una subclass de controller de navigation, tenía que agregar y ocultar el control de progreso, y luego proporcionar un método de conveniencia para permitir que cualquier controller de vista tenga acceso a él.

EDITAR: el código, pero no ha sido comstackdo o utilizado por mí desde 2013. Está en la subclass del controller de navigation:

 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. UIProgressView *progress = [[UIProgressView alloc] initWithProgressViewStyle:UIProgressViewStyleBar]; progress.tag = DISPLAY_PROGRESS_VIEW; [self.view addSubview:progress]; UINavigationBar *navBar = [self navigationBar]; NSLayoutConstraint *constraint; constraint = [NSLayoutConstraint constraintWithItem:progress attribute:NSLayoutAttributeBottom relatedBy:NSLayoutRelationEqual toItem:navBar attribute:NSLayoutAttributeBottom multiplier:1 constant:-0.5]; [self.view addConstraint:constraint]; constraint = [NSLayoutConstraint constraintWithItem:progress attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:navBar attribute:NSLayoutAttributeLeft multiplier:1 constant:0]; [self.view addConstraint:constraint]; constraint = [NSLayoutConstraint constraintWithItem:progress attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:navBar attribute:NSLayoutAttributeRight multiplier:1 constant:0]; [self.view addConstraint:constraint]; [progress setTranslatesAutoresizingMaskIntoConstraints:NO]; progress.hidden = YES; UILongPressGestureRecognizer *longPressGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPress:)]; [navBar addGestureRecognizer:longPressGesture]; } 
 // Add progress view to bar myProgressView.frame = CGRect(x: 0, y: 64, width: self.view.frame.width, height: 4) myProgressView.alpha = 0 myProgressView.backgroundColor = Color.dark() myProgressView.tintColor = UIColor.white navigationController!.view.addSubview(myProgressView)