Je suis confronté à un problème où la grande barre de navigation de titre s'effondre très brusquement lors du défilement sur un UITableView intégré à l'intérieur d'un UIViewController. Le problème semble se produire uniquement lors du défilement vers le haut sur l'écran. Lorsque vous faites défiler l'écran vers le bas, le titre se transforme en douceur pour redevenir grand, mais pas l'inverse.
Ce problème ne se produit PAS si vous utilisez un UITableViewController.
Voici le comportement normal et attendu lors du défilement dans un UITableViewController.
Et voici la transition brisée et abrupte lors de l'utilisation d'un UITableView à l'intérieur d'un UIViewController.
Voici le code de l'implémentation cassée:
class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 12
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Basic", for: indexPath)
cell.textLabel?.text = "Title \(indexPath.row)"
return cell
}
}
La barre de navigation a coché Préfère les grands titres et l'élément de navigation a Grand titre défini sur Automatique.
Le code et la configuration des deux exemples ci-dessus sont exactement les mêmes, sauf pour celui qui est un UITableViewController par rapport à un UITableView à l'intérieur d'un UIViewController.
J'ai également observé que le comportement interrompu ne se produit PAS si le contenu de UITableView ne dépasse pas la hauteur de la vue. Mais une fois qu'il y a plus de cellules que ce que peut contenir l'écran, cela se brise.
Une idée si je fais quelque chose de mal ou s'il s'agit d'un bogue iOS 11?
5 réponses
J'ai été confronté au même problème: j'avais UIViewController
intégré dans UINavigationController
, le UIViewController
avait une vue de table avec des contraintes de début, de fin, de haut, de bas vers la zone de sécurité . L'ensemble de la tableview s'est comporté de manière instable / rapide. L'astuce consistait à changer la contrainte supérieure de tableview en superview .
Ici j'ai enregistré la modification de la contrainte changement de contrainte de bogue d'iOS 11 tableview
La réponse de Soolar est juste, mais je ne sais pas comment résoudre ce problème dans le storyboard. Enfin, j'ai résolu le problème avec la solution de Roman dans une autre question, en ajoutant:
NSLayoutConstraint.activate([
scrollView.topAnchor.constraint(equalTo: view.topAnchor),
scrollView.leftAnchor.constraint(equalTo: view.leftAnchor),
scrollView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
scrollView.rightAnchor.constraint(equalTo: view.rightAnchor)
])
Dans viewDidLoad
.
Réponse d'origine: https://stackoverflow.com/a/48321447/1386369
Dans Interface Builder:
- Sélectionnez votre "viewController".
- Inspecteur d'attributs cochez "Sous les barres opaques" et "Sous les barres supérieures".
- Faites vos principales contraintes de votre deuxième élément scrollView sur "SuperView" et non sur "SafeArea".
Cela a fonctionné avec moi.
Mettez cette ligne de code sur votre UIViewController contenant UITableView et fonctionne très bien pour moi.
Rapide
extendedLayoutIncludesOpaqueBars = true;
Objectif c
self.extendedLayoutIncludesOpaqueBars = YES;
Définissez l'espace supérieur de UITableView AutoLayout sur "Vue d'ensemble" au lieu de "Zone sûre"
J'ai eu un problème d'apparence similaire et je l'ai résolu en supprimant UINavigationBar.appearance().isTranslucent = false
depuis mon AppDelegate.
MISE À JOUR: Si vous ne voulez pas de translucidité, vous devez activer { {X0}}. De cette façon, tous les problèmes sont résolus.
Questions connexes
Questions liées
De nouvelles questions
swift
Swift est un langage de programmation polyvalent sûr, rapide et expressif développé par Apple Inc. pour ses plateformes et Linux. Swift est open-source. Utilisez la balise uniquement pour les questions sur les fonctionnalités linguistiques ou nécessitant du code dans Swift. Utilisez les balises [ios], [ipados], [macos], [watch-os], [tvos], [cocoa-touch] et [cocoa] pour les questions (indépendantes du langage) sur les plates-formes ou les frameworks.