web-dev-qa-db-fra.com

Espace blanc indésirable à gauche de UIScrollView sur iPhone X

UIScrollView fonctionne correctement sans espace blanc à gauche sur tous les iPad ou iPhone, à l'exception de l'iPhone X. Comment puis-je supprimer cet espace?

J'utilise des storyboards. Bounce On Scroll/Zoom sont tous désactivés. Pas d'espace blanc sur iPad ou iPhone, à l'exception de l'iPhone X. Je pense que cela pourrait être lié à la zone de sécurité.

 enter image description here

8
zsong

Eh bien, j'ai résolu ce problème d'une manière non élégante. Mais cela fonctionne comme un charme. (J'ai essayé toutes les autres réponses. Merci pour votre aide, mais ces réponses ne semblent pas fonctionner dans mon cas.)

var leftMargin: CGFloat = 0
var rightMargin: CGFloat = 0

if Device.isPhone() && Device.IS_5_8_INCHES() {
    self.leftMargin = 44
    self.rightMargin = 44
}

let frame = CGRect(
    x: (self.view.frame.width - self.leftMargin - self.rightMargin) * CGFloat(pageIndex),
    y: ...
)
1
zsong

Définir la contrainte relative à safeArea est une bonne pratique pour iPhone-X. Voici comment Apple dit -

Lorsque la vue est visible à l'écran, ce guide indique la partie de la vue qui n'est pas couverte par les barres de navigation, les barres d'onglets, les barres d'outils et les autres vues d'ancêtres.

Dans votre cas, vous indiquez des contraintes leading & trailing of scrollView avec safeArea, pas superView

Par conséquent, si vous prenez le risque de contraindre superview au lieu de safeArea, le contenu de votre objet peut être tronqué, en particulier lorsque vous faites pivoter à gauche, le contenu situé le plus à gauche sera découpé sous la partie supérieure de l'iPhone-X.

 enter image description here

Doc Apple pour safeAreaLayoutGuide

4
Jack

Cet espacement provient de la zone de sécurité, qui est appliquée à gauche/à droite de UIScrollview en tant qu'insert de contenu en orientation paysage sur iPhone X, visible à l'aide de la propriété en lecture seule UIScrollview.safeAreaInsets.

La ligne suivante peut être utilisée pour se débarrasser des encarts de zone sécurisée lorsque vous n’avez pas besoin:

UIScrollview.contentInsetAdjustmentBehavior = .never

La valeur par défaut UIScrollViewContentInsetAdjustmentBehavior.automatic inclut les marges du guide de disposition de la zone sécurisée en tant qu'incréments de contenu.

Remarque: les contraintes de mise en page automatique n'ont rien à voir avec les incrustations, son comportement d'ajustement d'inserts de contenu pour iOS 11 UIScrollview.

3
AamirR