55

By default UITextField has a light gray color as its border color. I want to set my UITextView to have the same border color as the UITextField.

I tried:

myTextView.layer.borderColor = UIColor.lightGrayColor().CGColor
// or
myTextView.layer.borderColor = UIColor.lightTextColor().CGColor
// or 
myTextView.layer.borderColor = myTextField.layer.borderColor

They still have up to have different color.

How to set the UITextView border to match UITextField color?

Phil Dukhov
  • 67,741
  • 15
  • 184
  • 220
n179911
  • 19,547
  • 46
  • 120
  • 162

8 Answers8

74

Try this code.

UIColor *borderColor = [UIColor colorWithRed:204.0/255.0 green:204.0/255.0 blue:204.0/255.0 alpha:1.0];

myTextView.layer.borderColor = borderColor.CGColor;
myTextView.layer.borderWidth = 1.0;
myTextView.layer.cornerRadius = 5.0;

change borderWidth and cornerRadius value to get exact ui as UITextField.

Deepak
  • 1,421
  • 1
  • 16
  • 20
31

This Swift code also works for setting same border color, width & radius as UITextField:

myTextView.layer.borderColor = UIColor(red: 0.9, green: 0.9, blue: 0.9, alpha: 1.0).CGColor
myTextView.layer.borderWidth = 1.0
myTextView.layer.cornerRadius = 5
Aks
  • 8,181
  • 5
  • 37
  • 38
17

I had this similar question for iOS 10, and wasn't able to find an answer, but this is what I found using the Digital Color Meter in Utilities and the iOS Simulator.

Swift 3 / iOS 10

let color = UIColor(red: 186/255, green: 186/255, blue: 186/255, alpha: 1.0).cgColor
myTextView.layer.borderColor = color
myTextView.layer.borderWidth = 0.5
myTextView.layer.cornerRadius = 5
Jason Brady
  • 1,560
  • 1
  • 17
  • 40
7

swift 4.x/ios11.

I did another measure in PSD using simulator. I can confirm radius is 0.5 and color is 0.8, as 205/255 = 0.8 (or "cdcdcd" in HEX, as PSD suggests, BUT width must be 0.5. (I attached a PSD where You can compare radius of edit field (UITExtField) AND radius applied to a UITextView.

So its correct:

    let borderGray = UIColor(red: 0.8, green: 0.8, blue: 0.8, alpha: 1)
    self.TxtV.layer.borderColor = borderGray.cgColor
    self.TxtV.layer.borderWidth = 0.5
    self.TxtV.layer.cornerRadius = 5

Note: I tried to get color from a TextField already on View, but I got:

if let borderGray = self.cellPhoneTxt.layer.borderColor{ let BG = UIColor(cgColor: borderGray)

    print(BG)
    var red: CGFloat = 0
    var green: CGFloat = 0
    var blue: CGFloat = 0
    var alpha: CGFloat = 0
    BG.getRed(&red, green: &green, blue: &blue, alpha: &alpha)
    print(red, green, blue, alpha)

}

but I got in console:

kCGColorSpaceModelRGB 0 0 0 1

0.0 0.0 0.0 1.0

so it seems Apple is using full black AND some Alpha.

enter image description here

ingconti
  • 10,876
  • 3
  • 61
  • 48
4

Try this code for Swift

let borderColor = UIColor.whiteColor.Cgcolor()

myTextView.layer.borderColor = borderColor.CGColor;
myTextView.layer.borderWidth = 1.0;
myTextView.layer.cornerRadius = 5.0;
Gaurav
  • 334
  • 6
  • 28
4

As with Swift 5.2 and with dark mode support :)

I only wanted to add an example with semantic UI using adaptable colors. Sometimes hardcoding the values is not what you want especially if you support dark mode. I think using .label as semantic color gets you to the default gray used by the UITextField border in light and dark mode. Try this out:

myTextView.layer.cornerRadius = 10
myTextView.layer.borderWidth = 1
myTextView.layer.borderColor = UIColor.label.cgColor

I like to play with other semantic colors too. This will look nice in dark mode:

myTextField.layer.cornerRadius = 10
myTextField.layer.borderWidth = 1
myTextField.layer.borderColor = UIColor.systemGray4.cgColor

and your UITextView will look exactly the same with:

myTextView.layer.cornerRadius = 10
myTextView.layer.borderWidth = 1.0
myTextView.layer.borderColor = UIColor.systemGray4.cgColor
multitudes
  • 2,898
  • 2
  • 22
  • 29
2

The exact color is:

Objective-C:

[UIColor colorWithRed:0.76 green:0.76 blue:0.76 alpha:1.0].CGColor;

Swift:

UIColor(red:0.76, green:0.76, blue:0.76, alpha:1.0).CGColor
dosdos
  • 1,519
  • 1
  • 10
  • 14
Tom
  • 21
  • 1
0

For generic solution through out the project. You can extern UIView class and add these methods to it.

-(void)setBorderColor:(UIColor *)borderColor{
    self.layer.borderColor = (borderColor).CGColor;
}
-(UIColor*)borderColor{
    return [UIColor colorWithCGColor: self.layer.borderColor];
}

//Getter and setter for border width
-(void)setBorderWidth:(NSInteger)borderWidth{
    self.layer.borderWidth = borderWidth;
}
-(NSInteger)borderWidth{
    return  (NSInteger)roundf((self.layer.borderWidth));
}

Its an extension to UIView. Just add these UIView+Designable.h/m files in your project and you can see the multiple more options in attribute inspector.

Mubeen Qazi
  • 167
  • 1
  • 8