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.

iOS 11 UITableView inside of a UIViewController (broken abrupt transition when scrolling)

Et voici la transition brisée et abrupte lors de l'utilisation d'un UITableView à l'intérieur d'un UIViewController.

iOS 11 UITableViewController (transitioning properly)

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?

25
Villarrealized 31 déc. 2017 à 03:34

5 réponses

Meilleure réponse

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

44
Amal T S 30 juil. 2019 à 11:23

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

0
Yongqiang Zhou 27 déc. 2019 à 02:44

Dans Interface Builder:

  1. Sélectionnez votre "viewController".
  2. Inspecteur d'attributs cochez "Sous les barres opaques" et "Sous les barres supérieures".
  3. Faites vos principales contraintes de votre deuxième élément scrollView sur "SuperView" et non sur "SafeArea".

Cela a fonctionné avec moi.

Référence

3
FarouK 12 mai 2019 à 14:47

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"

36
Filippo 7 juin 2018 à 13:44

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.

4
fl034 26 mai 2020 à 14:23