UITextView Berbatasan


127

Saya ingin memiliki perbatasan abu-abu tipis di sekitar UITextView. Saya telah memeriksa dokumentasi Apple tetapi tidak dapat menemukan properti apa pun di sana. Tolong bantu.

Jawaban:


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
Saya tidak berpikir itu benar-benar perlu banyak penjelasan, tampilan adalah UITextView, dan kode pergi ke mana pun Anda mengatur tampilan (awakeFromNib atau viewDidLoad adalah dua tempat yang memungkinkan). Karena tidak ada kode yang diberikan, tidak ada cara untuk memberikan konteks yang baik sebagai tanggapan.
Kendall Helmstetter Gelner

XCode jangan biarkan saya mengatur batas untuk lapisan. Dikatakan bahwa lapisan itu hanya-baca. Saya membuat UIView (di mana meletakkan beberapa elemen) dan mencoba mengatur perbatasan ke tampilan itu. Mencoba melakukan ini self.myView.layer.borderWidth ..., tetapi seperti yang saya katakan, lapisan hanya-baca, jadi lapisan tidak memiliki metode atau variabel untuk disetel
Paulius Vindzigelskis

2
Apakah Anda mengimpor QuartzCore? Anda juga dapat mencoba mengeluarkan CALayer dari self.myView dan menyetel borderWidth padanya. Ini bisa diatur.
Kendall Helmstetter Gelner

Beberapa informasi lebih lanjut tentang "lapisan" menjadi hanya-baca di UIView (properti lapisan adalah, tetapi Anda dapat menyetel nilai di lapisan untuk tampilan): stackoverflow.com/questions/12837077/…
Kendall Helmstetter Gelner

42

Tambahkan berikut ini untuk sudut membulat:

self.yourUITextview.layer.cornerRadius = 8; 

23

Berikut kode yang saya gunakan, untuk menambahkan batas di sekitar TextViewkontrol saya bernama "tbComments":

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

Dan inilah tampilannya:

masukkan deskripsi gambar di sini

Sangat mudah.


19

Saya tambahkan UIImageViewsebagai subview dari UITextView. Ini cocok dengan batas asli di a UITextField, termasuk gradien dari atas ke bawah:

masukkan deskripsi gambar di sini

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

Ini adalah gambar png yang saya gunakan, dan representasi jpg:

@ 1x

@ 2x

masukkan deskripsi gambar di sini


Solusi bagus. Apakah gambar-gambar ini milik Anda? Apakah kita bebas menggunakannya?
James Webster

Gambar-gambar ini 'dimodelkan' dari gambar yang digunakan di aplikasi Apple sendiri. Sebenarnya saya mengekstraknya dan membuat sangat sedikit, jika ada, perubahan. Gunakan dengan resiko Anda sendiri. Tujuannya adalah untuk meniru tampilan dan nuansa asli sehingga sulit untuk menghasilkan sesuatu yang terlihat jauh berbeda. Untuk apa nilainya, saya telah mengirim dan telah menyetujui aplikasi menggunakan gambar ini tanpa masalah.
Ben Packard

File gambar png tampaknya telah dihapus - Saya tidak bermaksud untuk terus memperbaruinya dengan lokasi gambar baru, jadi saya mohon maaf jika jpg tidak berfungsi untuk Anda. Saya dapat mengunggah ulang jika diminta melalui komentar.
Ben Packard

3
Dengan gambar terlampir, ini berfungsi paling baik: coderesizableImageWithCapInsets: UIEdgeInsetsMake (28, 14, 28, 14)
RefuX

Tautan WikiUpload (untuk dua gambar) gagal menemukan file gambar sekarang. ;-(
Mike Gledhill

18

Berfungsi bagus, tetapi warnanya harus a CGColor, bukan UIColor:

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

4
#import <QuartzCore / QuartzCore.h>
kolinko

6

Saya yakin jawaban di atas adalah untuk versi Swift sebelumnya. Saya mencari di Google sedikit dan kode di bawah ini berfungsi untuk Swift 4. Hanya membagikannya untuk siapa pun yang dapat memperoleh manfaat.

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

Selamat Coding!


Dengan Swift5 dan mode gelap, Anda bahkan dapat menggunakan warna sistem:self.textViewName.layer.borderColor = UIColor.systemGray4.cgColor
banyak orang

4

untuk Pemrograman Swift, gunakan ini

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

Atau hanyaUIColor(white: 0.2, alpha: 1).CGColor
Leo

3

ini sedekat yang saya bisa dari UITextField asli

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

Anda dapat menambahkan batas ke UITextView dari Storyboard - Identity Inspector - Atribut Waktu Proses yang Ditentukan Pengguna

masukkan deskripsi gambar di sini


0

Mulai iOS 8 dan Xcode 6, saya sekarang menemukan solusi terbaik adalah subclass UITextView dan menandai subclass sebagai IB_DESIGNABLE, yang akan memungkinkan Anda untuk melihat perbatasan di storyboard.

Tajuk:

#import <UIKit/UIKit.h>

IB_DESIGNABLE

@interface BorderTextView : UITextView

@end

Penerapan:

#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

Kemudian tarik keluar UITextView Anda di storyboard dan setel kelasnya ke BorderTextView


0

Hal yang membuatnya berhasil (selain mengikuti jawaban di sini) adalah menambahkan borderStyleatribut:

#import <QuartzCore/QuartzCore.h>
..

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

0

Hanya sedikit tambahan. Jika Anda membuat batas sedikit lebih lebar, itu akan mengganggu sisi kiri dan kanan teks. Untuk menghindarinya, saya menambahkan baris berikut:

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

0

Di Swift 3, Anda dapat menggunakan dua baris berikut:

myText.layer.borderColor = UIColor.lightGray.cgColor

myText.layer.borderWidth = 1.0

-3

Saya memecahkan masalah ini di storyboard dengan menempatkan sepenuhnya dinonaktifkan di UIButtonbelakang UITextViewdan membuat warna latar belakang UITextViewclearColor. Ini berfungsi tanpa memerlukan kode atau paket tambahan.


3
Tentu saja, ini tidak berfungsi di iOS 7, karena tombol tidak memiliki tepi (tombol terlihat seperti label sekarang)
Mike Gledhill
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.