Je migre actuellement mon application sur iOS 7 et je suis bloqué depuis des heures sur le nouveau contrôleur de navigation / gestion de la barre.
Avant, lorsque nous avions un contrôleur de navigation, nous avions un extrait comme celui-ci:
UINavigationController *navController = [[UINavigationController alloc]initWithRootViewController:[[MainViewController alloc]init]];
Dans l'interface builder, nous avons eu le choix de définir une barre de navigation existante pour la vue et tout correspond au contenu de la vue réelle.
OK donc maintenant, je n'ai aucune idée de comment concevoir correctement avec le constructeur d'interface. J'ai toujours mon extrait de code pour initialiser mon navcontroller. Cependant, dans le générateur d'interface de mon MainViewController, si je définis une barre d'état sur une barre de navigation translucide ou opaque, j'ai un décalage de 44px en haut (voir ci-dessous).
Interface Builder _________________________Et le résultat
Maintenant, si je règle la barre d'état sur aucun, il n'y a pas de décalage en haut, mais comme la vue sur le simulateur est plus petite à cause de la barre de navigation, le bas de la vue dans le générateur d'interface est coupé.
Interface Builder _________________________Et le résultat
Je suppose qu'il me manque vraiment quelque chose ici, mais je ne trouve aucun sujet ou info Apple dans le guide des transitions iOS7 à ce sujet.
Merci de votre aide
ÉDITER
Comme nous pouvons le voir sur les images, le premier enfant de la vue est un UIScrollView qui contient les deux étiquettes, le problème n'apparaît pas lorsqu'il n'y a pas de scrollview. Il apparaît également s'il s'agit d'un UITableView. Si une étiquette est en dehors de UIScrollView, il n'y a pas de décalage par rapport à cette étiquette.
Réponses:
OK donc j'ai trouvé la solution, j'ai défini dans mon contrôleur la propriété:
Cependant, je ne comprends pas vraiment le véritable avantage de cette propriété (ou pourquoi la valeur par défaut est true)
La seule documentation que j'ai trouvée était là:
Mettre à jour
Dans iOS 11
automaticallyAdjustsScrollViewInsets
est obsolèteVous devez maintenant utiliser:
Je vous encourage également à vérifier cette question et sa réponse pour mieux comprendre ces propriétés
la source
UIScrollView
de défiler. Mais sans cela, je ne peux pas me débarrasser du décalage. Weired ...La réponse de @ Justafinger a également fonctionné comme un charme pour moi.
Je voulais juste ajouter que ce paramètre peut également être ajusté facilement à partir du constructeur d'interface.
la source
Je rencontrais le même problème, mais j'ai trouvé une propriété plutôt étrange sur le ViewController dans le générateur d'interface qui semble avoir causé cela pour moi. Il existe un ensemble de cases à cocher "Prolonger les bords". J'ai supprimé la vérification "Sous les barres supérieures" et tout a commencé à s'organiser correctement pour moi.
la source
Avec automaticAdjustsScrollViewInsets défini sur YES (le paramètre par défaut), il existe une discordance dans le positionnement de la vue de défilement entre ios6 et ios7, vous devez donc désactiver ce paramètre pour les rendre cohérents. Cependant, ios6 plantera s'il tombe automatiquementAdjustsScrollViewInsets, vous devez donc soit effectuer un changement programmatique de automaticAdjustsScrollViewInsets conditionnel sur ios7, soit désactiver l'option à l'aide du storyboard / NIB
la source
J'ai eu un problème similaire, après avoir rejeté un viewController, le contentOffset de ma tableView a été changé en (0, -64).
ma solution était un peu bizarre, j'ai essayé toutes les autres réponses mais sans succès, la seule chose qui a résolu mon problème était de changer la position tableView dans l'arborescence des contrôles du .xib
c'était le premier contrôle dans la vue parent comme ceci:
J'ai déplacé la tableView juste après ImageView et cela a fonctionné:
il semble que le fait de placer la vue de la table en première position était à l'origine du problème et de déplacer la vue de la table vers une autre position a résolu le problème.
PD Je n'utilise pas autoLayout ni storyboards
j'espère que cela peut aider quelqu'un!
la source
Je suis également confronté à ce problème.
UIScrollView
la taille du contenu est calculée par le système d'exploitation comme les autres tailles, les origines fournies par le système de contraintes - c'est pourquoi le système d'exploitation est douteux.Comment réparer - Vous devez définir explicitement la taille du contenu de
UIScrollView
:UIView
(je le renomme enContentView
)ContentView.Weight = View.Weight
etContentView.Height = View.Height
la source
Il semble qu'une solution de contournement consiste à afficher le fichier de storyboard en tant que "iOS 6.1 et versions antérieures" (sélectionnez le fichier de storyboard-> Inspecteur de fichiers-> Document du générateur d'interface-> Afficher sous. Le positionnement des sous-vues dans ce mode montre le décalage.
la source
Merci les gars pour les solutions! J'ai lutté pendant des heures pour essayer de résoudre le problème. Tout allait bien quand il n'y avait pas de barre de navigation impliquée, mais cela s'est détraqué au moment où j'ai intégré le ViewController dans un NavigationController.
Je l'ai résolu en décochant les encarts Ajuster la vue de défilement et les barres inférieures . Les deux se trouvent dans l'inspecteur d'attributs de ViewController. Mille mercis!
la source