Tengo un UIScrollView (en realidad, un UICollectionView, pero que, probablemente, no importa). Cuando aparece en IOS 7, la navegación controlador establece su contentInset y contentOffset a los valores que yo no quiero. Parece estar tratando de ajustar la barra de estado y la barra de navegación. Me gustaría mucho prefieren los dejó solos. Me he fijado esta reemplazando los métodos getter y setter para contentInset y contentOffset, con una bandera para indicar el objeto de si debe o no aceptar un conjunto. Pero hay una manera mejor?

7 Comentarios

  1. 208

    Pruebe a establecer self.automaticallyAdjustsScrollViewInsets = NO en su principal controlador de vista.

    Este fue introducido en iOS 7 así que usted puede ser que desee ajustar con una versión de iOS de verificación, si se apoya a la iOS 6 y abajo.


    Actualización

    Si usted está utilizando los storyboards, usted puede hacer esto en el Interface Builder, así como por la comprobación de 'Adjust Scroll View Insets' para su controlador seleccionado.

    iOS 7 — navigationController es la configuración de la contentInset y ContentOffset de mi UIScrollView

    • Se puede establecer sobre IB sólo si está utilizando los storyboards.
    • actualizada la respuesta, gracias.
    • La cruel cosa es que IB muestra esta configuración no es correcta; incluso con este indicador, se muestra en el IB como con la bandera.. y si a continuación, iniciar el simulador, el indicador funciona como se espera, lo que confunde por completo -.- Un mal ajuste! 🙂
    • Me has salvado de un día, hombre.
    • He pasado un día de averiguar por qué mi ImageView no es de izquierda esquina superior centrado con mi scrollView. Después he desactivado esta opción, todas las obras !
    • Lo que hace este «Ajuste de Desplazamiento de la Vista de Inserciones» opción incluso hacer?
    • Estoy en el mismo barco como Yakiv… esta solucionado mi problema (gracias!!!) pero me gustaría saber lo que la opción está haciendo, en primer lugar, y no he encontrado ninguna buena información en otros lugares. Gracias!

  2. 25

    He tenido un problema similar, después de despedir a un viewController, el contentOffset de mi en formato tableview se cambió de a (0, -64).

    mi solución fue un poco raro, he probado todas las otras respuestas, pero no tuvo éxito, la única cosa que fijo mi problema era cambiar el formato tableview posición en los controles de el árbol de la .xib

    fue el primer control en la Vista principal como este:

    iOS 7 — navigationController es la configuración de la contentInset y ContentOffset de mi UIScrollView

    He movido el formato tableview a la derecha después de que el ImageView y funcionó:

    iOS 7 — navigationController es la configuración de la contentInset y ContentOffset de mi UIScrollView

    parece que al poner a la vista de la tabla en la primera posición estaba causando el problema, y mover la vista de tabla a otra posición se ha solucionado el problema.

    P. D. yo no estoy usando el diseño automático ni storyboards

    espero que esto pueda ayudar a alguien!

    • También era mi problema, bug de iOS 7 ?
    • Eres una estrella! Nunca pensé que el fin de la scrollview puede ser el problema.
    • La razón por la que esto ocurre es insinuada por aceptada respuesta. El UIViewController configurará automáticamente la contentInset de la primera UIView. Haciendo el UITableView el segundo punto de vista, no va a obtener es contentInset establece automáticamente.
    • Michael, por desgracia, no es cierto. En mi caso el controlador de la propiedad no se comprobó la (falsa) y todavía tengo extraño en el recuadro. Evento de cambio de márgenes a 0 en viewWillAppear no estaba ayudando. Pero moviéndose en la vista de jerarquía ayudado. Realmente extraño error.
    • Cómo el ruido se hizo la figura del que fuera…
    • Gracias! Yo nunca habría encontrado que, en realidad tenía para agregar una vista vacía para el ViewController para esta revisión.
    • Hombre, eres impresionante. Yo nunca hubiera pensado que iba a causar el problema.
    • Wow, eso es raro, yo tengo el mismo problema, se pueden corregir mediante la adición de un maniquí de vista.

  3. 5

    Tengo dos soluciones:

    1.

    self.view = scrollView;

    2.

    [self.navigationController.toolbar setTranslucent:NO];
    • Gracias por esto, en Lugar de toolbar en el segundo ejemplo que necesitaba NavigationBar como en navigationController.NavigationBar.Translucent = false; (nota: Xamarin) que trabajó.
  4. 2

    Estoy teniendo el mismo problema.

    1. Configuración self.automaticallyAdjustsScrollViewInsets = NO resuelto el problema para algunos de la vista, pero no en todas partes.

    2. Segunda solución es establecer el contenido de la compensación de formato tableview/vista/scrollview en viewWillLayoutSubviews:

      - (void)viewWillLayoutSubviews {
          //Arrange the view
          CGRect tempViewFrame = self.view.frame;
      
          if (tempViewFrame.origin.y == 64.0f) {
              tempViewFrame.origin.y = 0;
              self.view.frame = tempViewFrame;
          }
      }
  5. 0

    Esto es suficiente

    - (void)viewDidLoad {
    
        [super viewDidLoad];
    
        self.automaticallyAdjustsScrollViewInsets = NO;
  6. 0

    Esto soluciona el problema en ambos casos cuando:

    1. Mostrar Barra De Estado
    2. Mostrar Barra De Estado + De La Barra De Navegación

      override func viewDidLayoutSubviews() {
              NSLog("ORIGIN: \(self.view.frame.origin.y)")
      
          if self.view.frame.origin.y == 0 {
              if let rect = self.navigationController?.navigationBar.frame {
                  let y = rect.size.height + rect.origin.y
                  self.tableView.contentInset = UIEdgeInsetsMake(y, 0, 0, 0)
              }
          } else if self.view.frame.origin.y == 44 || self.view.frame.origin.y == 64 {
              self.tableView.contentInset = UIEdgeInsetsMake(0, 0, 0, 0)
          }
      }
  7. 0

    Las otras respuestas que pueden funcionar para usted, pero no funciona para mí. Lo que funcionó para mí era establecer manualmente la y propiedad de la contentOffset en viewDidLayoutSubviews y viewWillAppear:

    override func viewDidLayoutSubviews() {
        super.viewDidLayoutSubviews()
    
        //Set the offset to go below the status bar
        collectionView.contentOffset.y = -UIApplication.shared.statusBarFrame.height
    }
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
    
        //Set the offset to go below the status bar
        collectionView.contentOffset.y = -UIApplication.shared.statusBarFrame.height
    }

    En mi caso, mi controlador tenido un hijo de recolección de vista que a veces conseguir la contentOffset ajustado y otras veces no. La forma en que me normalizado fue precisamente ajustar manualmente cada vez. Yo quería que el contenido a ser compensado por debajo de la barra de estado, por lo que utiliza la barra de estado de la altura como el valor (negativo porque quiero que el contenido sea empujado hacia abajo).

Dejar respuesta

Please enter your comment!
Please enter your name here