2017-02-10 1 views
0

Je suis la conception d'une application swift qui montre une photo, carte et le contenu - tout cela dans UITableView en-tête.pourquoi mes contraintes rendent la mise en page différente lors de l'exécution de l'application sur iphone 5 et iphone 6?

Quand je lance l'application sur l'iPhone 5, il ressemble à ceci:

enter image description here

Le champ jaune est une vue de texte qui a les contraintes suivantes:

enter image description here

et :

enter image description here

Cela ressemble bien sur iphone 5. Cependant, quand je le lance sur iPhone 6, je vois:

enter image description here

Je ne comprends pas pourquoi ces deux points de vue diffèrent.

Maintenant, dans mon code, en viewDidLoad() j'ai un appel à la méthode:

defineHeaderView() 

qui renseigne essentiellement la vue d'en-tête avec des données (par exemple le nom d'utilisateur remplit, texte, photo).

J'ai aussi ce bloc de code:

override func viewDidLayoutSubviews() { 
    super.viewDidLayoutSubviews() 
    sizeHeaderToFit() 
} 

func sizeHeaderToFit() { 
    let headerView = myTable.tableHeaderView! 

    headerView.setNeedsLayout() 
    headerView.layoutIfNeeded() 

    let height = headerView.systemLayoutSizeFitting(UILayoutFittingCompressedSize).height 
    var frame = headerView.frame 
    frame.size.height = height 
    headerView.frame = frame 

    myTable.tableHeaderView = headerView 
} 

Dans le storyboard je définir la headerview en vue à l'intérieur du UITableView:

enter image description here

Pouvez-vous me expliquer pourquoi la vue différer sur les deux écrans?

Pour donner une meilleure idée, voici les autres contraintes:

Carte:

enter image description here

et la photo de fond qui est ici:

enter image description here

a la contraintes suivantes:

enter image description here

+0

Je suppose que le problème est avec vos images. L'écran de l'iPhone 5 est plus mince, et en fonction de la taille de vos images et de vos contraintes (et si clipSubviews est défini sur true/false), les images seront très différentes. – PeejWeej

+0

Vous devez essayer de déboguer la hiérarchie de vues sur les différents périphériques pour vérifier les cadres/contraintes réels – PeejWeej

+0

Il n'y a pas assez d'informations sur les noms de vos vues et autres contraintes.Donc ceci est juste une supposition: La contrainte pour vos vues hauteur (la jaune) est liée par "plus grand ou égal". Selon votre deuxième contrainte, le haut de votre vue devrait être de 644 points au-dessous du sommet des parents - c'est une valeur statique. Ainsi, sur les appareils de différentes tailles (hauteurs), votre vue sera étirée en hauteur. –

Répondre

0

Veuillez supprimer la contrainte supérieure de votre UILabel.

+0

Quand je supprime la contrainte supérieure, alors mon 'UILabel' va en haut de l'écran ... – user3766930

+2

Je ne sais pas si c'est une réponse efficace, mais ce serait une * meilleure * réponse si vous ajoutez une explication de * pourquoi * cela va résoudre le problème. – dfd

+0

Je viens d'ajouter plus d'informations sur les contraintes à la question d'origine – user3766930