0
votes

Uitextfield est en train d'être dessiné deux fois à l'écran

Je ajoute de manière programmée un UITEXTFIELD à une horizontale uistackview, qui est à l'intérieur d'une Vertical Uistackview, mais il est affiché avec des coins arrondis et pointus.

Ce que je pense que le problème est que le Uitextfield est attiré deux fois , d'abord avec l'apparence par défaut, puis avec l'apparence personnalisée que j'ai ajoutée à sa couche. p>

Le Uitextfield ressemble à ceci p>

 uitextfield p >

Si vous regardez de près, vous pouvez voir que la couleur des coins tranchants est la valeur par défaut, tandis que le reste de la bordure est plus sombre. P>

Le code que j'utilise pour modifier son apparence est la suivante. P>

myTextField.layer.borderWidth = 1.0
myTextField.layer.cornerRadius = 6.0
myTextField.clipsToBounds = true

myTextField.layer.borderColor = UIColor.darkGray.cgColor

myTextField.isUserInteractionEnabled = false

// Create the constraints
constraints.append(NSLayoutConstraint(item: horizontalStackView, attribute: .width, relatedBy: .equal, toItem: verticalStackView, attribute: .width, multiplier: 1.0, constant: 0.0))

// Add the components to the Horizontal Stack View
horizontalStackView.addArrangedSubview(myTextField)
horizontalStackView.addArrangedSubview(myStepper) // A stepper that resides next to the conflicting TextField
verticalStackView.addArrangedSubview(horizontalStackView)


7 commentaires

Pouvez-vous ajouter le code que vous utilisez pour créer le champ de texte? On dirait que cela dessine une frontière supplémentaire, mais le style frontière par défaut est "Aucun", donc cela semble étrange.


Salut Noah. Outre le code de la question, il n'y a que l'appel à l'initialiseur sans paramètres.


Pouvez-vous partager le code sur la manière dont vous l'ajoutez à votre vue sur la pile? Avez-vous quelque chose dans l'inspecteur des attributs Xcode?


@Carlosm. - Vous devez avoir autre chose en cours. Essayez votre code dans un nouveau contrôleur de vue, où tout ce que vous ajoutez est la vue sur la pile avec (je suppose) votre étiquette et votre champ de texte. Si vous ne voyez pas les "coins tranchants", alors vous savoir Il y a autre chose dans votre code qui le cause. Aussi, utilisez la hiérarchie de la vue de débogage pour inspecter ce qui est réellement là-bas.


@Juliansilvestri j'ai ajouté le code. Je ne monte pas la vue directement dans un storyboard, donc il n'y a pas d'inspecteur d'attributs


S'il vous plaît clarifier ValègeEtextfield et MyTextfield, ce sont différents corrects? Ou avez-vous connecté votre TextView à deux identités?


@Juliansilvestri mon mauvais. C'est le même Textfield, j'ai changé le nom dans le code d'origine pour une meilleure compréhension, mais j'ai oublié de le changer sur le dernier édition


3 Réponses :


0
votes

Vous aurez peut-être besoin de xxx


1 commentaires

Ce n'est pas un bon moyen de contourner un problème comme celui-ci - il y a un coût de performance pour Clipstobounds . Une meilleure solution serait un moyen d'arrêter la deuxième frontière d'être dessinée en premier lieu.



1
votes

Essayez d'ajouter vos sous-visions à votre page de pile comme ceci.

stackView.translatesAutoresizingMaskIntoConstraints = false


0 commentaires

0
votes

J'ai essayé SH_KHAN Solution et cela a fonctionné, mais après avoir lu les commentaires, j'ai décidé d'essayer autre chose afin qu'il n'y aurait aucun coût de performance. Après avoir commenté cette ligne de code (la clipplication) et l'exécution de l'application à nouveau, les coins ne se sont pas présentés.

Je suis complètement positif Il n'y a pas d'autre changement en plus d'ajouter cette ligne, d'exécuter l'application, puis de commenter la même ligne de sortie.

Je ne suis pas vraiment sûr de ce que le problème (ou même la solution) était. Peut-être que tout ce que je devais faire était de nettoyer le dossier de construction ( produit -> nettoyer le dossier de construction ) mais cela n'a pas de sens pour moi.


0 commentaires