Depuis la mise à jour XCode8 GM et ios10, tous mes vues créées via l'Interface Builder ne sont pas initialisé correctement jusqu'à ce beaucoup, beaucoup plus tard que prévu. Ce qui signifie dans le viewDidLoad, cellForRowAtIndexPath, viewWillAppear, etc, la taille d'image est définie sur {1000,1000} pour chaque vue. À un certain moment, ils semblent correctes, mais son beaucoup trop tard.
Le premier problème rencontré est avec les communes de l'arrondissement des coins à défaut travers le conseil d'administration:
view.layer.cornerRadius = view.frame.size.width/2
Outre les problèmes apparaissent pour tout ce qui repose sur la taille d'image pour faire des calculs dans le code.
cellForRowAtIndexPath
Pour cellForRowAtIndexPath, la taille d'image initiale échoue sur le tableau d'affichage, mais alors fonctionne très bien une fois que vous faites défiler. willDisplayCell:forRowAtIndexPath n'a pas la bonne taille de l'image soit.
J'ai codé en dur quelques valeurs, mais ce n'est évidemment très mauvais code de pratique, ainsi que d'assez nombreuses dans mes projets.
Est-il un moyen ou un endroit pour obtenir de corriger les tailles de cadre?
MODIFIER
J'ai découvert que l'utilisation de la hauteur/largeur de la contrainte à la place du châssis largeur hauteur est plus fiable. Cela peut ajouter la surcharge d'avoir besoin de beaucoup de nouveaux IBOutlets de relier la hauteur/largeur de contraintes sur les éléments bien.
Pour l'instant j'ai créé une UIView catégorie qui me permet d'accéder à la Vue de la hauteur/largeur de contraintes directement, sans IBOutlets. Pour réduire au minimum l'utilisation de la petite boucle ne devrait pas être un gros problème. Résultats non garantis pour les IB éléments sans que la largeur/hauteur des contraintes encore créé de toute évidence. Probablement renvoie 0 au mieux pour la constante, ou pire. Aussi, si vous n'avez pas la hauteur/largeur de la contrainte et de votre point de vue est dimensionné de façon dynamique en fonction avant/après de contraintes, cela ne fonctionne pas.
-viewDidLoad semble avoir corriger la taille de l'image, mais se traduit souvent par un changement de visuel de l'INTERFACE utilisateur si vous faites des modifications ici.
UIView+WidthHeightConstraints.h
@interface UIView (WidthHeightConstraints)
-(NSLayoutConstraint*)widthConstraint;
-(NSLayoutConstraint*)heightConstraint;
-(NSLayoutConstraint*)constraintForAttribute:(NSLayoutAttribute)attribute;
@end
UIView+WidthHeightConstraints.m
#import "UIView+WidthHeightConstraints.h"
@implementation UIView (WidthHeightConstraints)
-(NSLayoutConstraint*)widthConstraint{
return [self constraintForAttribute:NSLayoutAttributeWidth];
}
-(NSLayoutConstraint*)heightConstraint {
return [self constraintForAttribute:NSLayoutAttributeHeight];
}
-(NSLayoutConstraint*)constraintForAttribute:(NSLayoutAttribute)attribute {
NSLayoutConstraint *targetConstraint = nil;
for (NSLayoutConstraint *constraint in self.constraints) {
if (constraint.firstAttribute == attribute) {
targetConstraint = constraint;
break;
}
}
return targetConstraint;
}
@end
EDIT 2
La catégorie ci-dessus a prouvé que partiellement efficaces. Principalement parce que ios semble ajout automatique d'un couple supplémentaire de la hauteur/largeur de la contrainte de doublons, qui sont de type NSContentSizeLayoutConstraint, qui sont en fait pas la même taille que la normale de la contrainte. Le NSContentSizeLayoutConstraint est aussi une classe privée donc je ne peux pas faire isKindOfClass de filtre. Je n'ai pas trouvé un autre moyen efficace de tester pour ceux encore. C'est gênant.