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.
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
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 –
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