带边框的UITextView


127

我想在A周围有一个细的灰色边框UITextView。我已经阅读了Apple文档,但是在那儿找不到任何财产。请帮忙。

Answers:


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
我认为并不需要太多解释,视图是UITextView,并且代码可以放在您设置视图的任何位置(awakeFromNib或viewDidLoad是两个可能的位置)。由于没有给出代码,因此无法给出良好的响应上下文。
Kendall Helmstetter Gelner 2011年

XCode不允许我为图层设置边框。它说该层是只读的。我制作了UIView(在其中放置了一些元素)并尝试为该视图设置边框。尝试执行此操作self.myView.layer.borderWidth ...,但是正如我所说的,图层是只读的,因此图层没有任何要设置的方法或变量
Paulius Vindzigelskis 2012年

2
您导入了QuartzCore吗?您也可以尝试从self.myView中取出CALayer并在其上设置borderWidth。它是可设置的。
Kendall Helmstetter Gelner 2012年

正在只读的“层”的一些详细信息的UIView(图层属性,但你可以在该层的视图设置的值):stackoverflow.com/questions/12837077/...
肯德尔黑尔姆施泰特Gelner

42

为圆角添加以下内容:

self.yourUITextview.layer.cornerRadius = 8; 

23

这是我用来在TextView控件周围添加一个名为“ tbComments” 的边框的代码:

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

这是它的样子:

在此处输入图片说明

十分简单。


19

我将添加UIImageView为的子视图UITextView。这与上的本机边界匹配UITextField,包括从上到下的渐变:

在此处输入图片说明

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];

这些是我使用的png图像和jpg表示形式:

@ 1x

@ 2x

在此处输入图片说明


好的解决方案。这些图像是您的吗?我们可以自由使用它们吗?
James Webster

这些图像是根据Apple自己的应用程序中使用的图像“建模”的。实际上,我提取了它们并且几乎没有进行任何更改。使用风险自负。目的是模仿本地外观,因此很难提出看起来有很大不同的东西。对于它的价值,我已经发货并批准了使用该图像的应用程序,没有任何问题。
本·帕克

png图像文件似乎已被删除-我不打算用新的图像位置不断更新此图像,因此如果jpg对您不起作用,我深表歉意。我可以按评论要求重新上传。
Ben Packard

3
附加图像后效果最佳:coderesizableImageWithCapInsets:UIEdgeInsetsMake(
28,14,28,14

WikiUpload链接(用于两个图像)现在无法找到图像文件。;-(
Mike Gledhill

18

效果很好,但是颜色应该是CGColor,而不是UIColor

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

4
#import <QuartzCore / QuartzCore.h>
kolinko 2011年

6

我相信以上答案适用于Swift的早期版本。我用Google搜索了一下,下面的代码适用于Swift 4。

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

编码愉快!


使用Swift5和黑暗模式,您甚至可以使用系统颜色:self.textViewName.layer.borderColor = UIColor.systemGray4.cgColor
众多

4

对于Swift编程,请使用此

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

或者只是UIColor(white: 0.2, alpha: 1).CGColor
Leo

3

这与原始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
}


0

从iOS 8和Xcode 6开始,我现在发现最好的解决方案是对UITextView进行子类化并将该子类标记为IB_DESIGNABLE,这将允许您在情节提要中查看边框。

标头:

#import <UIKit/UIKit.h>

IB_DESIGNABLE

@interface BorderTextView : UITextView

@end

实现方式:

#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

然后只需将您的UITextView拖到情节提要中,并将其类设置为BorderTextView


0

使它起作用的原因(除了遵循此处的答案)还添加了borderStyle属性:

#import <QuartzCore/QuartzCore.h>
..

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

0

只是一小部分。如果边框变宽,则会干扰文本的左侧和右侧。为了避免这种情况,我添加了以下行:

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

0

在Swift 3中,您可以使用以下两行:

myText.layer.borderColor = UIColor.lightGray.cgColor

myText.layer.borderWidth = 1.0

-3

我在情节提要中解决了此问题,方法是在UIButton后面放置一个完全禁用的选项,UITextView并设置UITextViewclearColor 的背景色。这不需要额外的代码或程序包。


3
当然,这在iOS 7中不起作用,因为按钮没有边缘(按钮现在看起来像标签了)
Mike Gledhill
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.