De correspondance de sous-vue de la largeur de c'est superview à l'aide de mise en page automatique
Objectif:
Ont un UIWebView
être de la même largeur que c'est superview, qui est un UIScrollView
, à l'aide de contraintes de mise en page automatique.
Code
NSLayoutConstraint *makeWidthTheSameAsScrollView =[NSLayoutConstraint
constraintWithItem:self.questionWebView
attribute:NSLayoutAttributeWidth
relatedBy:0
toItem:self.masterScrollView
attribute:NSLayoutAttributeWidth
multiplier:1.0
constant:0];
[self.view addConstraint:makeWidthTheSameAsScrollView];
NSLog(@"The width of questionWebView *AFTER* adding the constrain is: %f", self.questionWebView.frame.size.width);
NSLog(@"The width of scrollView *AFTER* adding the constrain is: %f", self.masterScrollView.frame.size.width);
Résultat Courant
Lorsque je me connecte la largeur de self.questionWebView
(le UIWebView
), c'est la largeur ne change pas lors de la mise en page automatique contrainte est appliquée.
Questions
- Est-ce la bonne démarche?
- Ce que je fais mal?
p.s je sais que c'est à l'encontre d'Apple recommandations pour placer un UIWebView
dans un UIScrollView
, cependant j'ai désactivé la possibilité de faire défiler les UIWebView
l'aide de la propriété self.questionWebView.userInteractionEnabled = NO;
. Et utilisant actuellement une UIWebView est mon meilleur stratégie pour l'affichage d'un tableau HTML.
OriginalL'auteur drc | 2013-08-20
Vous devez vous connecter pour publier un commentaire.
Sur l'amélioration de Rob réponse, comme demandé.
De Rob déjà mentionné,
UIScrollViews
avez comportement anormal en vertu de la Disposition Automatique.Ce qui est de l'intérêt dans ce cas est le fait que la scrollView largeur totale est déterminée à l'aide de son sous-vues largeur totale. Ainsi, alors que la scrollView déjà demande à la webView pour sa largeur, vous dites à la webView également demander à la scrollView à sa largeur. C'est pourquoi il ne fonctionne pas. L'un demande à l'autre, et personne ne connaît la réponse. Vous avez besoin d'une vue de référence à utiliser comme une contrainte pour la webView, puis la scrollView sera également en mesure de réussir à poser au sujet de sa durée de largeur.
Un moyen simple de ce qui pourrait être fait: créer un autre point de vue,
containerView
, et ajouter la scrollView comme une sous-vue. Puis définissez les contraintes propres pourcontainerView
. Disons que vous avez voulu la scrollView centré sur un viewController, avec rembourrage sur les bords. Donc, il ne pour lacontainerView
:Vous pouvez ensuite ajouter de la webView comme une sous-vue de la scrollView et la fixation de sa largeur:
Cela rendrait la scrollview aussi gros et grand que la webView, et ils seraient placés comme prévu (avec l'ensemble des contraintes qui pèsent sur containerView).
OriginalL'auteur Aloha Silver
Scrollviews sont un peu étrange dans la façon dont ils interagissent avec mise en page automatique. Voir TN2154 (UIScrollView et de mise en page automatique).
Voir aussi UIScrollView n'utilise pas les contraintes de mise en page automatique.
En général, vous avez besoin pour obtenir la largeur de la vue de quelque autre façon que "la largeur actuelle de la scrollview" puisque dans la mise en page automatique de la scrollview de la largeur (c'est à dire le contenu de la largeur) est défini en fonction de son contenu. Ainsi, votre demande est circulaire.
merci, ajouter ce que une réponse distincte s'il vous plaît, je pense que c'est utile éclaté comme une réponse plutôt qu'un commentaire.
OriginalL'auteur Rob Napier