Umrandete UITextView


127

Ich möchte einen dünnen grauen Rand um a haben UITextView. Ich habe die Apple-Dokumentation durchgesehen, konnte dort jedoch keine Immobilie finden. Bitte helfen Sie.

Antworten:


306
#import <QuartzCore/QuartzCore.h>

....

// typically inside of the -(void) viewDidLoad method
self.yourUITextView.layer.borderWidth = 5.0f;
self.yourUITextView.layer.borderColor = [[UIColor grayColor] CGColor];

62
Ich dachte nicht, dass es wirklich viel Erklärung braucht, die Ansicht ist die UITextView und der Code geht dorthin, wo Sie die Ansicht eingerichtet haben (awakeFromNib oder viewDidLoad sind zwei mögliche Stellen). Da kein Code angegeben wurde, gibt es keine Möglichkeit, als Antwort einen guten Kontext anzugeben.
Kendall Helmstetter Gelner

Mit XCode kann ich keinen Rand für die Ebene festlegen. Es heißt, dass die Ebene schreibgeschützt ist. Ich habe UIView erstellt (wo einige Elemente eingefügt wurden) und versucht, den Rand für diese Ansicht festzulegen. Der Versuch, dies zu tun self.myView.layer.borderWidth ..., aber wie gesagt, die Ebene ist schreibgeschützt, sodass die Ebene keine Methoden oder Variablen zum
Festlegen

2
Haben Sie QuartzCore importiert? Sie können auch versuchen, einen CALayer aus self.myView herauszuholen und borderWidth darauf zu setzen. Es ist einstellbar.
Kendall Helmstetter Gelner

Weitere Informationen zum schreibgeschützten "Layer" in UIView (die Layer-Eigenschaft ist, aber Sie können Werte im Layer für eine Ansicht festlegen
Kendall Helmstetter Gelner

42

Fügen Sie für abgerundete Ecken Folgendes hinzu:

self.yourUITextview.layer.cornerRadius = 8; 

23

Hier ist der Code, den ich verwendet habe, um einen Rahmen um mein TextViewSteuerelement mit dem Namen "tbComments" hinzuzufügen:

self.tbComments.layer.borderColor = [[UIColor grayColor] CGColor];
self.tbComments.layer.borderWidth = 1.0;
self.tbComments.layer.cornerRadius = 8;

Und so sieht es aus:

Geben Sie hier die Bildbeschreibung ein

Kinderleicht.


19

Ich füge UIImageViewals Unteransicht der UITextView. Dies entspricht dem nativen Rand auf a UITextField, einschließlich des Verlaufs von oben nach unten:

Geben Sie hier die Bildbeschreibung ein

textView.backgroundColor = [UIColor clearColor];
UIImageView *borderView = [[UIImageView alloc] initWithFrame: CGRectMake(0, 0, textView.frame.size.width, textView.frame.size.height)];
borderView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
UIImage *textFieldImage = [[UIImage imageNamed:@"TextField.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(15, 8, 15, 8)];
borderView.image = textFieldImage;
[textField addSubview: borderView];
[textField sendSubviewToBack: borderView];

Dies sind die von mir verwendeten PNG-Bilder und eine JPG-Darstellung:

@ 1x

@ 2x

Geben Sie hier die Bildbeschreibung ein


Gute Lösung. Sind diese Bilder deine? Können wir sie verwenden?
James Webster

Diese Bilder sind denen nachempfunden, die in Apples eigenen Apps verwendet werden. In Wahrheit habe ich sie extrahiert und nur sehr wenige, wenn überhaupt, Änderungen vorgenommen. Benutzung auf eigene Gefahr. Das Ziel war es, das native Erscheinungsbild nachzuahmen, sodass es schwierig ist, etwas zu finden, das ganz anders aussieht. Für das, was es wert ist, habe ich Apps mit diesem Bild ohne Probleme ausgeliefert und genehmigt.
Ben Packard

Die PNG-Bilddateien scheinen entfernt worden zu sein. Ich beabsichtige nicht, dies ständig mit einem neuen Bildspeicherort zu aktualisieren. Ich entschuldige mich, wenn das JPG für Sie nicht funktioniert. Ich kann nach Bedarf per Kommentar erneut hochladen.
Ben Packard

3
Mit dem angehängten Bild funktioniert dies am besten: coderesizableImageWithCapInsets: UIEdgeInsetsMake (28, 14, 28, 14)
RefuX

Die WikiUpload-Links (für die beiden Bilder) können die Bilddateien jetzt nicht finden. ;-(
Mike Gledhill

18

Funktioniert super, aber die Farbe sollte a sein CGColor, nicht UIColor:

view.layer.borderWidth = 5.0f;
view.layer.borderColor = [[UIColor grayColor] CGColor];

4
#import <QuartzCore / QuartzCore.h>
Kolinko

6

Ich glaube, die obigen Antworten beziehen sich auf die vorherigen Versionen von Swift. Ich habe ein bisschen gegoogelt und der folgende Code funktioniert für Swift 4. Teilen Sie ihn einfach für jeden, der davon profitiert.

self.textViewName.layer.borderColor = UIColor.lightGray.cgColor
self.textViewName.layer.borderWidth = 1.0
self.textViewName.layer.cornerRadius = 8

Viel Spaß beim Codieren!


Mit Swift5 und dem Dunkelmodus können Sie sogar die Systemfarben verwenden:self.textViewName.layer.borderColor = UIColor.systemGray4.cgColor
Vielzahl

4

Verwenden Sie diese Option für die schnelle Programmierung

tv_comment.layer.borderWidth = 2
tv_comment.layer.borderColor = UIColor(red: 0.2, green: 0.2, blue: 0.2, alpha: 1).CGColor

Oder einfachUIColor(white: 0.2, alpha: 1).CGColor
Leo

3

Dies ist so nah wie möglich an einem originalen UITextField

func updateBodyTextViewUI() {
    let borderColor = UIColor.init(red: 212/255, green: 212/255, blue: 212/255, alpha: 0.5)

    self.bodyTextView.layer.borderColor = borderColor.CGColor
    self.bodyTextView.layer.borderWidth = 0.8
    self.bodyTextView.layer.cornerRadius = 5
}

1

Sie können UITextView über das Storyboard - Identity Inspector - Benutzerdefiniertes Laufzeitattribut einen Rahmen hinzufügen

Geben Sie hier die Bildbeschreibung ein


0

Ab iOS 8 und Xcode 6 finde ich jetzt die beste Lösung darin, UITextView zu unterklassifizieren und die Unterklasse als IB_DESIGNABLE zu markieren, damit Sie den Rand im Storyboard anzeigen können.

Header:

#import <UIKit/UIKit.h>

IB_DESIGNABLE

@interface BorderTextView : UITextView

@end

Implementierung:

#import "BorderTextView.h"

@implementation BorderTextView

- (void)drawRect:(CGRect)rect
{
    self.layer.borderWidth = 1.0;
    self.layer.borderColor = [UIColor blackColor].CGColor;
    self.layer.cornerRadius = 5.0f;
}

@end

Ziehen Sie dann einfach Ihre UITextView in das Storyboard und setzen Sie ihre Klasse auf BorderTextView


0

Die Sache, die es funktioniert hat (zusätzlich zu den Antworten hier), ist das Hinzufügen des borderStyleAttributs:

#import <QuartzCore/QuartzCore.h>
..

phoneTextField.layer.borderWidth = 1.0f;
phoneTextField.layer.borderColor = [[UIColor blueColor] CGColor];
phoneTextField.borderStyle = UITextBorderStyleNone;

0

Nur eine kleine Ergänzung. Wenn Sie den Rand etwas breiter machen, beeinträchtigt dies die linke und rechte Seite des Texts. Um dies zu vermeiden, habe ich die folgende Zeile hinzugefügt:

self.someTextView.textContainerInset = UIEdgeInsetsMake(8.0, 8.0, 8.0, 8.0);

0

In Swift 3 können Sie die folgenden zwei Zeilen verwenden:

myText.layer.borderColor = UIColor.lightGray.cgColor

myText.layer.borderWidth = 1.0

-3

Ich habe dieses Problem im Storyboard gelöst, indem ich ein vollständig deaktiviertes Element UIButtonhinter das UITextViewund die Hintergrundfarbe der UITextViewclearColor gesetzt habe. Dies funktioniert ohne zusätzlichen Code oder Pakete.


3
Natürlich funktioniert dies nicht in iOS 7, da die Schaltflächen keine Kanten haben (die Schaltflächen sehen jetzt wie Beschriftungen aus)
Mike Gledhill
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.