Ruang kosong di atas UITextView di iOS 10

116

Saya memiliki UITextView dengan beberapa teks di dalamnya. Semuanya baik-baik saja dengan iOS 6 tetapi sekarang dengan iOS 7 meninggalkan ruang kosong di atas dan kemudian menempatkan teks di bawah tengah textview.masukkan deskripsi gambar di sini

Saya tidak menyetel contentOffSet apa pun. Tolong bantu!

Ali Sufyan
sumber

Jawaban:

217

Tampilan teks adalah tampilan gulir. Pengontrol tampilan akan menambahkan offset konten secara otomatis ke tampilan gulir, karena diasumsikan mereka ingin menggulir ke atas di belakang bilah navigasi dan bilah status.

Untuk mencegahnya, setel properti berikut di pengontrol tampilan yang berisi tampilan teks:

self.automaticallyAdjustsScrollViewInsets = NO
jrturton.dll
sumber
7
Ini adalah jawaban yang lebih baik karena tidak hanya membahas cara memperbaiki masalah, tetapi juga mengapa hal itu terjadi.
Stephen Melvin
1
BTW, Anda tidak perlu membuat subkelas dan mengganti. Cukup setel secara otomatisAdjustsScrollViewInsets ke NO setelah Anda membuat instance UITextView.
leftspin
1
@leftspin adalah kasus yang sangat jarang terjadi di mana Anda belum membuat subclass pengontrol tampilan. Dan mengganti metode berarti kode Anda akan tetap berfungsi pada versi iOS yang lebih rendah - menyetel properti berarti Anda memerlukan pemeriksaan kompatibilitas terlebih dahulu.
jrturton
1
Jadi, jika Model View Controller saya berada di luar UINavigationController offset akan dihapus? Agak gila ... Perilaku ini HANYA benar ketika tampilan teks saya disejajarkan ke atas, jika tidak maka itu sampah ... Adakah yang bisa menjelaskan mengapa Apple melakukan hal seperti itu?
Paul Brewczynski
@jrturton minta maaf karena ini adalah posting yang lebih lama dan mohon maaf karena saya baru mengenal objektif-c tetapi saat ini ini adalah milik UIViewController ... apakah itu dulu metode?
Craig
58

Jawaban yang diberikan IronManGill saat ini bukanlah solusi yang baik, karena tidak didasarkan pada pemahaman tentang mengapa masalah tersebut terjadi sejak awal.

Jawaban jrturton juga bukan cara terbersih untuk menyelesaikannya. Anda tidak perlu mengganti. Tetap sederhana!

Yang Anda butuhkan hanyalah menyetel yang berikut ini:

self.automaticallyAdjustsScrollViewInsets = NO;

dalam metode viewDidLoad.

Lihat dokumennya: https://developer.apple.com/documentation/uikit/uiviewcontroller/1621372-automaticallyadjustsscrollviewin

Dumoko
sumber
1
Membuat perubahan di storyboard mungkin terkadang lebih baik. Pergi ke "Identity Inspector" -> "User Defined Runtime Attributes", dan tambahkan definisi di sana.
hufeng03
automaticallyAdjustsScrollViewInsets sudah ditinggalkan. Dari iOS11, gunakancontentInsetAdjustmentBehavior
Cœur
47

Di Interface Builder,

  • Pilih pengontrol tampilan yang berisi UITextView.
  • Pergi ke inspektur atribut.
  • Hapus centang "Sesuaikan Insets Tampilan Gulir".
pengguna2268026
sumber
Ini adalah solusi termudah untuk kasus saya di ios8
platinor
3
Catatan: Ini adalah properti UIViewController. Tidak dapat menemukannya dan kemudian menyadari bahwa saya tidak membaca teks sepenuhnya
Maik639
37

Ini berhasil untuk saya

textView.textContainerInset = UIEdgeInsetsZero;  
textView.textContainer.lineFragmentPadding = 0;
Ravi Bihani
sumber
24

Pergi ke Interface Builder:

  1. Pilih view controlleryang berisi filetext view
  2. hapus centang Adjusts Scroll View Insetsproperti

masukkan deskripsi gambar di sini

Aamir
sumber
inilah yang saya cari. Anda juga dapat melakukan ini dengan menambahkan 'self.automaticallyAdjustsScrollViewInsets = false' ke viewController
CodeOverRide
Ini adalah jawaban yang bagus dan tegas, yang kebetulan mengakhiri pencarian saya untuk "mengapa teks ini tidak muncul".
UpSampler
10

Saya benar-benar bertanya-tanya apakah ini adalah fitur nyata… Inset otomatis 64 titik ini hanya ditambahkan ketika UIScrollViewatau UITextViewsebagai kedalaman yang lebih dalam dari semua subview dari tampilan pengontrol tampilan. Misalnya, jika Anda menambahkan tampilan di belakang (di sini saya berbicara tentang z-buffer, bukan tampilan imbrication) tampilan gulir, inset 64 titik ini tidak otomatis ditambahkan.

Misalnya, yang ini menambahkan inset:

masukkan deskripsi gambar di sini

Dalam kasus ini, inset tidak ditambahkan:

masukkan deskripsi gambar di sini

Ini benar-benar tampak aneh bagi saya… Mengapa OS melihat kedalaman tampilan untuk memutuskan apakah harus memperluas tampilan?

MonsieurDart
sumber
6

Dengan cepat (Xcode 6)

 self.automaticallyAdjustsScrollViewInsets = false
Claudio Barrozo Prado
sumber
Lakukan ini di viewDidLoadView Controller dengan tampilan teks.
Suragch
automaticallyAdjustsScrollViewInsets sudah ditinggalkan. Dari iOS11, gunakancontentInsetAdjustmentBehavior
Cœur
6

Anda dapat menghapus ruang kosong di atas Anda UITextViewdengan menambahkan:

yourTextView.textContainerInset = UIEdgeInsetsZero;
lberyouk
sumber
5

Saya menyelesaikan masalah ini dengan mengatur ofset konten ke nilai negatif. Ini kode Swift.

yourTextView.setContentOffset(CGPoint(x: 0, y: -150), animated: true)
Saqib Omer
sumber
Ini adalah solusi terbaik untuk menjaga sisipan dan menggulir di bawah bilah tembus cahaya dengan benar. Saya akan menyarankan modifikasi ini. [self.textView setContentOffset:CGPointMake(0.f, -self.topLayoutGuide.length) animated:NO];
InitJason
1
Tidak ada yang berhasil untuk saya kecuali ini. Swift, Xcode 9.1.
Ashok
1

Yang harus Anda pahami adalah bahwa ini berkaitan dengan bilah navigasi:

  • Jika konten Anda berada di bawah bilah navigasi, Anda ingin pengontrol tampilan menyesuaikan secara otomatis insets tampilan gulir (default).
  • Jika konten Anda tidak berada di bawah bilah navigasi (Anda mungkin menggunakan panduan tata letak atas untuk batasan ruang atas), Anda dapat menonaktifkan penyesuaian inset tampilan gulir otomatis seperti yang disebutkan di sebagian besar balasan lainnya.
CodeStage
sumber
1

Saya mencoba trik berikut, itu berhasil.

- (void)viewDidLoad{
   self.textView.scrollEnabled = NO;  
}       
- (void)viewDidAppear:(BOOL)animated {
   [super viewDidAppear:animated];
   self.textView.scrollEnabled = YES;
}
casillas
sumber
1

Solusi untuk Swift 4:

textView.textContainerInset = UIEdgeInsets.zero
Kostas Tsoleridis
sumber
0

Ini adalah solusi yang tidak profesional, saya yakin ... Tetapi hanya meletakkan label kosong di belakang tampilan teks akan menyelesaikan masalah.

Terence
sumber
1
ini bukan solusi =)
Ilker Baltaci
0

Ini baru saja berfungsi untuk saya (tersedia dari iOS 7)

[<#your UITextViewInstance#> setTextContainerInset:UIEdgeInsetsZero];
RyanTCB
sumber