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!

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

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


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".

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;

24

Pergi ke Interface Builder:

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

masukkan deskripsi gambar di sini


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?



6

Anda dapat menghapus ruang kosong di atas Anda UITextViewdengan menambahkan:

yourTextView.textContainerInset = UIEdgeInsetsZero;

5

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

yourTextView.setContentOffset(CGPoint(x: 0, y: -150), animated: true)

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.

1

Saya mencoba trik berikut, itu berhasil.

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


0

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


1
ini bukan solusi =)
Ilker Baltaci

0

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

[<#your UITextViewInstance#> setTextContainerInset:UIEdgeInsetsZero];
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.