2016-04-26 2 views
0

Hey donc j'ai un UITextView à l'intérieur d'un UIView que je charge dynamiquement avec du contenu. Je redimensionne la hauteur de la vue de texte en utilisant this solutionRedimensionner UIView pour envelopper son contenu avec la mise en page automatique désactivée

J'ai la mise en page automatique désactivée pour que cela fonctionne (d'autres solutions comme sizeToFit() ne fonctionnaient pas avec la mise en page automatique ON) mais quand je fais cela, même si tout le contenu de l'affichage du texte est rendu, il déborde les limites de celui-ci contenant UIView.

J'ai essayé d'utiliser la même solution qui a fonctionné pour la vue texte sur son conteneur, mais cela n'a rien fait.

Une chose qui semble fonctionner est:

newFrame = containerView.frame 
newFrame.size.height = textView.frame.size.height 
containerView.frame = newFrame 

Mais ce n'est pas ce que je dois coz je vais aussi avoir quelques étiquettes dans ce point de vue conteneur il est donc la hauteur ne peut pas être Identique au champ de texte.

Y at-il un moyen de résoudre ce problème sans réactiver la mise en page automatique? (Activer la mise en page automatique même aide?) Et si la mise en page automatique permet de résoudre ce problème, alors est-il un moyen de conserver la taille dynamique de la vue du texte (coz l'allumer va casser cela)?

Je suis très nouveau à ce sujet. Appréciez l'aide.

Oh et je suis en train de développer une application tvOS, pas une iOS. Dunno si cela fait une différence.

EDIT:

Voici le code actuel:

@IBOutlet weak var container: UIView! 
@IBOutlet weak var label: UILabel! 
@IBOutlet weak var text: UITextView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    print(text.frame.origin.x, text.frame.origin.y) 

    text.scrollEnabled = false 

    text.text = "bla blah blah blah boo boo boo boooooo boo blah yo yo yo yo yo hello" 
    let fixedWidth = text.frame.size.width 
    let newSize = text.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.max)) 
    var newFrame = text.frame 
    newFrame.size = CGSize(width: max(newSize.width, fixedWidth), height: newSize.height) 
    text.frame = newFrame 
} 

Cette dynamique élargit l'affichage du texte lorsque les changements de contenu. Ajout:

newFrame = containerView.frame 
newFrame.size.height = textView.frame.size.height 
containerView.frame = newFrame 

redimensionne le récipient UIView, mais fait l'text.frame.origin.y de la vue texte 0. Donc ajouter d'autres éléments au conteneur recouvre juste la vue du texte.

Répondre

0

Vous pouvez réaliser ceci avec l'autolayout ou le cadrage. Si vous utilisez frame, vous devez prendre en compte la hauteur de tous les autres composants dans containerView. Disons que vous avez 3 étiquettes, 1 au-dessus du textview et 2 en dessous ayant 15 points a distance verticale entre chaque, votre hauteur de containerView devrait être:

newFrame = containerView.frame 
newFrame.size.height = 15 + label1.frame.size.height + 15 + textView.frame.size.height + 15 + label2.frame.size.height + 15 + lable3.frame.size.height + 15 
containerView.frame = newFrame 

Avec Autolayout, vous devez définir une bonne contrainte verticale entre les composants à redimensionner en conséquence.

+0

Donc je dois coder en dur le rembourrage que j'ai entre mes différents composants et les ajouter ensemble? Ce n'est pas très propre, n'est-ce pas? Je n'ai pas vraiment eu le problème des contraintes verticales. Est-ce quelque chose que je peux utiliser sur UIView pour le redimensionner dynamiquement? – alokraop

+0

Ce n'est pas clair mais avant Autolayout qui était seulement l'option, vous pouvez mettre la partie constante directement à 45. Pour Autolayout vous pouvez passer par https://www.raywenderlich.com/110393/auto-layout-visual-format-language -tutorial –

+0

hey donc l'ajout de hauteurs avec quelque chose de rembourrage n'a pas fonctionné. Il s'avère que l'attribution de la hauteur de la vue de texte au conteneur modifie en quelque sorte l'origine de la vue de texte, de sorte qu'elle chevauche tous les autres contrôles situés au-dessus. Aucune idée pourquoi, cependant. – alokraop