有边界的 UITextView

我想有一个细的灰色边框周围的 UITextView。我查看了苹果的文档,但没有发现任何财产。请帮帮我。

82914 次浏览
#import <QuartzCore/QuartzCore.h>


....


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

工程伟大,但颜色应该是 CGColor,而不是 UIColor:

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

加入以下圆角:

self.yourUITextview.layer.cornerRadius = 8;

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

enter image description here

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

enter image description here

我在情节串连板中解决了这个问题,在 UITextView后面放置了一个完全禁用的 UIButton,并使 UITextView的背景颜色为 clear Color。这不需要额外的代码或包就可以工作。

下面是我使用的代码,用于在 TextView控件周围添加一个名为“ tbComments”的边框:

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

看起来是这样的:

enter image description here

小菜一碟。

至于 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

使它工作的事情(除了下面的答案)是添加 borderStyle属性:

#import <QuartzCore/QuartzCore.h>
..


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

快速编程,用这个

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

这是最接近原始 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
}

只是个小小的补充。如果边框稍微宽一点,就会影响文本的左右两边。为了避免这种情况,我添加了以下内容:

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

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

myText.layer.borderColor = UIColor.lightGray.cgColor


myText.layer.borderWidth = 1.0

我相信以上的答案是针对以前版本的 Swift 的。我谷歌了一下,下面的代码为 Swift 4工作。只是分享给任何可能受益的人。

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

编码愉快!

您可以通过 Storyboard-Identity spector-User DefiedRuntime 属性向 UITextView 添加边框

enter image description here

一个优雅的解决方案是在底部插入一个真正的 UITextField,并防止它与内容一起滚动。这样你甚至有正确的黑暗模式边界。

class BorderedTextView: UITextView {


let textField = UITextField()


required init?(coder: NSCoder) {
super.init(coder: coder)
insertTextField()
}


override init(frame: CGRect, textContainer: NSTextContainer?) {
super.init(frame: frame, textContainer: textContainer)
insertTextField()
}


convenience init() {
self.init(frame: .zero, textContainer: nil)
}


private func insertTextField() {
delegate = self
textField.borderStyle = .roundedRect
insertSubview(textField, at: 0)
}


override func layoutSubviews() {
super.layoutSubviews()
textField.frame = bounds
}
}


extension BorderedTextView: UITextViewDelegate {


func scrollViewDidScroll(_ scrollView: UIScrollView) {
textField.frame = bounds
}
}