Comment ajouter une bordure juste sur le côté supérieur d'une UIView
Ma question est dans le titre.
Je ne sais pas comment faire pour ajouter une bordure dans un côté, le haut ou le bas, de tout côté...
layer.border
dessine la frontière pour l'ensemble de la vue...
- double possible de UIView de bordure en bas?
Vous devez vous connecter pour publier un commentaire.
Je considère le sous-classement
UIView
et dominantedrawRect
exagéré ici. Pourquoi ne pas ajouter une extension surUIView
et ajouter une bordure, sous-vues?Avec ce code, vous n'êtes pas lié à votre sous-classe trop, vous pouvez l'appliquer à tout et n'importe quoi qui hérite de
UIView
réutilisables dans votre projet, et à tous les autres. Passer à d'autres arguments à vos méthodes pour définir d'autres couleurs et de largeurs. De nombreuses options.UICollectionView
Swift version de Adam Waite est génial 5/5/15 plus:
Swift 3:
view.layoutIfNeeded()
droite avant d'appelerview.layer.addBorder(...)
. Puis il travaille dans Swift 3override func viewDidLayoutSubviews()
La meilleure façon pour moi, c'est une catégorie sur UIView, mais
adding views
au lieu de CALayers, afin que nous puissionstake advantage of AutoresizingMasks
à assurez-vous que les frontières redimensionner avec la superview.Objective C
Swift 5
Swift 3.0
Swift 4.1
Sous-classe
UIView
et de mettre en œuvredrawRect:
dans votre sous-classe, par exemple:Objective-c
Swift 4
Cela attire de 2 pixels de la ligne rouge comme une bordure supérieure. Toutes les autres variations que vous mentionnez sont à gauche comme un banal exercice pour le lecteur.
Quartz 2D Guide de Programmation est recommandé.
UIView
sous-classe pourrait avoir une propriété qui détermine quelles frontièresdrawRect:
attire. Cette propriété peut être définie avecNS_OPTIONS
de manière à définir un masque de bits comme leUIViewAutoresizing
masque de bits. Si pour quelque raison que ce soit - vous vraiment l'objet qui a fortement de sous-classementUIView
puis il suffit d'ajouter un petit 1-2 pixels de hauteur (ou largeur) sous-vue et donnez-lui quelles que soient les dimensions que vous voulez simuler une frontière.Code pour la réponse choisie, dans le cas où quelqu'un le veut.
REMARQUE: Cela ne fonctionne pas avec mise en page automatique (aka, la rotation de l'appareil en mode paysage, etc).
D'abord définir l'épaisseur:
Alors il suffit de copier usage de tout ou partie de ces à la frontière que vous souhaitez définir.
De La Bordure Supérieure
De La Bordure Inférieure
Bordure Gauche
Droite De La Bordure
Swift version:
Edit: Pour les versions mises à jour vérifier mon repo ici:
https://github.com/goktugyil/EZSwiftExtensions/blob/master/Sources/UIViewExtensions.swift
Regarder la addBorder pièces
Vieille question, mais la mise en page automatique-solution d'exécution les rajustements à la frontière manque toujours.
Suivantes UIView extension va ajouter de la frontière que sur les bords. Si vous modifiez les bords au moment de l'exécution, les frontières vont s'ajuster en conséquence.
J'ai pris les deux Adam Waite et Pauls réponses et combinés entre eux. J'ai également ajouté la possibilité de canaliser les arêtes sélectionnées ensemble, de sorte que vous devez appeler uniquement une fonction comme ceci:
ou alors:
Ce dont vous avez besoin pour mettre en œuvre est une catégorie sur UIView comme suggéré dans d'autres réponses avec la mise en œuvre suivants:
//MARQUE:- Ajouter LeftBorder Pour Afficher
//MARQUE:- Ajouter RightBorder Pour Afficher
//MARQUE:- Ajouter de la Bordure Inférieure De Vue
J'ai apporté quelques modifications à Dan réponse pour que je puisse ajouter des bordures à plusieurs arêtes avec une seule commande:
Voici le code complet:
Voici une solution simple. Ajouter une étiquette sur votre
UIView
, effacez le texte sur l'étiquette et l'ensemble de l'étiquette de la couleur d'arrière-plan à votre couleur de la bordure. Définir l'origine(x,y)
de votre étiquette à l'origine(x,y)
de votre point de vue. et de définir la largeur de l'étiquette à la largeur de votreUIView
, réglez la hauteur de 1 ou 2 (pour la frontière de la hauteur au sommet de votreUIView
). Et cela devrait faire l'affaire.Swift 4.2 et mise en page automatique
Je suis allé à travers les solutions proposées. Nombreux sont basés dans des cadres
C'est une simple extension qui fonctionne avec mise en page automatique
- utilisation Afficher à la place de la Couche de nous assurer de pouvoir utiliser la mise en page automatique
- Un seul sous-vue avec 4 contraintes
Utiliser comme suit:
Construction de NSBum de l' réponse, j'ai pris une approche similaire et a créé ce simple UIView sous-classe afin qu'il fonctionne dans Interface Builder et travaille avec des contraintes: github lien
En utilisant CGContextFillRect au lieu de CGContextStrokePath, j'ai pu, de manière prévisible, de maintenir les lignes complètement solide et dans les limites de la vue.
Voici mon billet de blog à ce sujet:
http://natrosoft.com/?p=55
-- En gros il suffit de le déposer dans une UIView dans Interface Builder et de modifier son type de classe à la NAUIViewWithBorders.
-- Ensuite dans votre cv viewDidLoad faire quelque chose comme:
Voici un lien direct vers le .m fichier de sorte que vous pouvez voir la mise en œuvre.
Il y a un projet de démonstration ainsi. Espérons que cela aide quelqu'un 🙂
Ma réponse à une question similaire: https://stackoverflow.com/a/27141956/435766
Personnellement, je préfère aller en bas de la catégorie de la route sur celui-là, car je veux être en mesure de l'utiliser sur n'importe quelle sous-classe de UIView.
Swift 3 version
Afin de définir correspondant frontière, vous devez remplacer viewDidLayoutSubviews() méthode:
Juste de poster ici pour aider quelqu'un à la recherche pour l'ajout de frontières. J'ai fait quelques changements dans l'acceptation de réponse ici swift uniquement sur l'étiquette de la frontière gauche.
Modifié la largeur dans le cas
UIRectEdge.Top
deCGRectGetHeight(self.frame)
àCGRectGetWidth(self.frame)
et en casUIRectEdge.Bottom
deUIScreen.mainScreen().bounds.width
àCGRectGetWidth(self.frame)
pour obtenir frontières correctement. L'Utilisation De Swift 2.Enfin l'extension est :
Au cas où quelqu'un ne sera jamais besoin de Xamarin version:
Voici une Swift 4 version de Pauls réponse
Inspiré par @Addison, j'ai réécrit l'extension sans l'utilisation d'une tierce partie, comme il l'a utilisé SnapKit et CocoaLumberjack.
Comme dans @Addisons approche, je suis également de supprimer précédemment ajouté frontières, de sorte que cette mise en œuvre doit jouer gentil avec réutilisables vues comme les cellules d'un tableau et la collecte de cellules.
Si je suis en train de construire à partir de l'intérieur de la table de montage séquentiel, je préfère ajouter un
UIView
derrière mon utileUIView
... Si je veux créer une bordure sur le haut de maUIView
, je viens d'augmenter la hauteur de l'arrière-planUIView
par ma largeur de la bordure.. La même chose peut être fait pour n'importe quel autre côté 🙂Personnellement, j'aime la sous-classement de la vue + drawRect, mais ici, c'est juste une autre façon d'aller à ce sujet (et il fonctionne sur les mêmes lignes que l'on a accepté de répondre par @Si Pollavith):
Votre nouvelle frontière de la couche peut être mis en place pour avoir tout ce que les dimensions que vous souhaitez. Donc, comme @Si Pollavith réponse, vous créez un calque pour être aussi grand que vous voulez qu'il soit, et aussi large que la vue que vous voulez avoir bordé. Utiliser le calque du cadre de définition de la placer où vous le souhaitez, puis de l'ajouter en tant que sous-couche pour votre point de vue.
De référence, de mon propre exigence était de mettre une bordure sur le côté GAUCHE de la vue (merci de ne pas copier et coller ce code et dis-moi juste parce qu'il ne veut pas mettre une bordure en haut de la vue -- modifiant le code ci-dessous est assez simple):
Je suppose que le seul modérée des prestations en cours et de faire un petit UIView ou UILabel, c'est que le CALayer est soi-disant "plus léger", et il y a beaucoup de points de vue intéressants (comme dans leurs opinions au sujet de l'équitation drawRect comparativement à l'utilisation d'CALayers (comme ici: iOS: Utilisation de UIView s 'drawRect:" par rapport à sa couche delagate 'drawLayer:inContext:').
Animal451
J'aime la couleur bleu.
En plus de n8tr peut ajouter qu'il y a une disponibilité pour les définir à partir de storyboard, soit:
- ajouter deux propriétés comme
borderColor
etborderWidth
dans .h fichier;- alors vous pourriez ajouter
keyPaths
droit dans le storyboard, voir le lien capture d'écranConvertir DanShev réponse à Swift 3
Pour Xamarin en C# je viens de créer la frontière inline lors de l'ajout de la sous-couche
Vous pouvez organiser cela (comme suggéré par d'autres) pour le fond, bordures gauche et droite.
Vous pouvez également consulter cette collection de UIKit et de la Fondation catégories: https://github.com/leszek-s/LSCategories
Il permet l'ajout de bordure sur un seul côté de UIView avec une seule ligne de code:
et il gère correctement la rotation de la vue alors que la plupart des réponses postées ici ne le gère pas bien.
Remarque: la plupart des solutions ne sont pas adaptatifs et ne change pas de taille. Les solutions de redimensionner aura un massive impact sur votre temps de démarrage, car ils utilisent beaucoup de CPU.
Vous pouvez utiliser cette solution en dessous. Il fonctionne sur UIBezierPaths qui sont plus légers que les couches, provoquant de démarrage rapide de temps. Il est facile à utiliser, voir les instructions ci-dessous.
Pour le réglage de la Bordure Supérieure et Inférieure de la Frontière pour une UIView en Swift.
Dans Swift 4 et 3
Je suis venu avec une solution à l'aide de
Swift 4.1
qui utiliseAutoLayout
etUIViews
de sorte qu'il sera redimensionné avec la vue.C'est basé sur @AdamWaite 's réponse, mais résout le problème de la vue tableau de cellules, où les cellules sont réutilisés. Si la frontière n'est pas retiré avant d'en ajouter un nouveau, puis de le réutilisé cellule contient plusieurs frontières.
Ce problème est résolu par la création d'un mannequin BorderView de classe et de recherche dans la sous-vue pour les frontières et la suppression.
Ce code utilise
SnapKit
pour les contraintes etCocoaLumberjack
pour le débogage. Si vous n'êtes pas à l'aide de ces derniers, alors il devrait être assez simple pour convertirAjouter ce code, puis au sein d'une classe qui sous-classes
UIView
, composez le:BorderView
classe factice doit être marqué commefileprivate
que c'est uniquement accessible au sein de cette extension.Pour moi œuvres
Utilisez code ci-dessous dans le viewDidLoad
ce jeu de codes de couleur rouge frontière de votre point de vue