İOS 10'da UITextView üstündeki boş alan


116

İçinde metin olan UITextView var. İOS 6'da her şey yolundaydı ama şimdi iOS 7 ile boş alanı üstte bırakıyor ve ardından metni metin görünümünün ortasının altına yerleştiriyor.görüntü açıklamasını buraya girin

Herhangi bir contentOffSet ayarlamadım. Lütfen yardım et!

Yanıtlar:


217

Metin görünümü, kaydırma görünümüdür. Görünüm denetleyicileri, gezinme çubuğunun ve durum çubuğunun arkasında yukarı kaydırmak isteyecekleri varsayıldığından, kaydırma görünümlerine otomatik olarak bir içerik ofseti ekleyecektir.

Bunu önlemek için, metin görünümünü içeren görünüm denetleyicisinde aşağıdaki özelliği ayarlayın:

self.automaticallyAdjustsScrollViewInsets = NO

7
Bu daha iyi bir cevap çünkü sadece sorunun nasıl düzeltileceğine değil, aynı zamanda neden ilk etapta gerçekleştiğine de değiniyor.
Stephen Melvin 1813

1
BTW, alt sınıfa ayırmanız ve geçersiz kılmanız gerekmez. UITextView'i başlattıktan sonra otomatik olarakAdjustsScrollViewInsets'i NO olarak ayarlayın.
leftspin

1
@leftspin, bir görünüm denetleyicisini alt sınıflara ayırmadığınız oldukça nadir bir durumdur. Yöntemin geçersiz kılınması, kodunuzun daha düşük iOS sürümlerinde çalışacağı anlamına gelir - özelliği ayarlamak, önce bir uyumluluk kontrolüne ihtiyacınız olduğu anlamına gelir.
jrturton

1
Öyleyse, Model Görünüm Denetleyicim UINavigationController'ın dışındaysa, uzaklık silinecek mi? Bu biraz çılgınca ... Bu davranış YALNIZCA metin görünümüm en üste hizalandığında doğrudur, aksi takdirde saçmalıktır ... Herhangi biri Apple'ın neden böyle bir şey yaptığını açıklayabilir mi?
Paul Brewczynski

@jrturton, bunun eski bir gönderi olduğu için özür diler ve lütfen objektif-c'de yeniyim, ancak bu şu anda UIViewController'ın bir mülkü ... bir yöntem miydi?
Craig

58

IronManGill'in verdiği mevcut cevap iyi bir çözüm değil, çünkü sorunun neden ilk başta meydana geldiğinin anlaşılmasına dayanmıyor.

jrturton'un cevabı da onu çözmenin en temiz yolu değil. Geçersiz kılmanıza gerek yok. Basit tutun!

İhtiyacınız olan tek şey aşağıdakileri ayarlamaktır:

self.automaticallyAdjustsScrollViewInsets = NO;

viewDidLoad yönteminde.

Dokümanlara göz atın: https://developer.apple.com/documentation/uikit/uiviewcontroller/1621372-automaticallyadjustsscrollviewin


1
Film şeridinde değişiklik yapmak, belki bazen daha iyidir. "Identity Inspector" -> "User Defined Runtime Attributes" seçeneğine gidin ve oraya bir tanım ekleyin.
hufeng03

automaticallyAdjustsScrollViewInsets kullanımdan kaldırıldı. İOS11'den şunu kullanıncontentInsetAdjustmentBehavior
Cœur

47

Arayüz Oluşturucu'da,

  • UITextView içeren görünüm denetleyicisini seçin.
  • Özellik denetçisine gidin.
  • "Kaydırma Görünümü Eklerini Ayarla" seçeneğinin işaretini kaldırın.

Bu ios8'deki durumum için en kolay çözüm
platinor

3
Not: UIViewController'ın bir özelliğidir. Bulamadım ve sonra metni tam olarak okumadığımı fark etti
Maik639

37

Bu benim için çalıştı

textView.textContainerInset = UIEdgeInsetsZero;  
textView.textContainer.lineFragmentPadding = 0;

24

Şuraya gidin Interface Builder:

  1. view controllerİçeren seçintext view
  2. Adjusts Scroll View Insetsmülkün işaretini kaldır

görüntü açıklamasını buraya girin


aradığım buydu. Ayrıca bunu, viewController'a 'self.automaticallyAdjustsScrollViewInsets = false' ekleyerek de yapabilirsiniz
CodeOverRide

Bu iyi ve kesin bir cevap, "bu metin neden görünmüyor" arayışımı sonlandırdı.
UpSampler

10

Bunun gerçek bir özellik olup olmadığını gerçekten merak ediyorum… Bu 64 noktalı otomatik ek, yalnızca görünüm denetleyicisinin görünümünün tüm alt görünümlerinin daha derinliği olarak UIScrollViewveya UITextViewdaha derin olduğunda eklenir . Örneğin, kaydırma görünümünün arkasına bir görünüm eklerseniz (burada z-arabelleğinden bahsediyorum, görünüm imbrikasyonu değil), bu 64 nokta ekleme otomatik olarak eklenmez.

Örneğin, bu ek ekler:

görüntü açıklamasını buraya girin

Bu durumda iç metin eklenmez:

görüntü açıklamasını buraya girin

Bu bana gerçekten tuhaf geliyor… İşletim sistemi, görüşü genişletip genişletmeyeceğine karar vermek için neden görüşün derinliğine baksın?



6

Üstündeki boş alanı şunları UITextViewekleyerek silebilirsiniz :

yourTextView.textContainerInset = UIEdgeInsetsZero;

5

İçerik ofsetini negatif bir değere ayarlayarak bu sorunu çözdüm. İşte Swift kodu.

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

Bu, ekleri doğru şekilde tutan ve yarı saydam çubuğun altında kaydırmayı doğru bir şekilde tutan en iyi çözümdü. Bu değişikliği öneririm. [self.textView setContentOffset:CGPointMake(0.f, -self.topLayoutGuide.length) animated:NO];
InitJason

1
Benim için bunun dışında hiçbir şey işe yaramadı. Swift, Xcode 9.1.
Ashok

1

Anlamanız gereken, bunun gezinme çubuğuyla ilgili olduğudur:

  • İçeriğiniz gezinme çubuğunun altına giriyorsa, görünüm denetleyicisinin kaydırma görünümü eklerini otomatik olarak ayarlamasını istersiniz (varsayılan).
  • İçeriğiniz gezinme çubuğunun altına girmiyorsa (büyük olasılıkla üst alan kısıtlaması için üst düzen kılavuzunu kullandınız), diğer yanıtların çoğunda belirtildiği gibi otomatik kaydırma görünümü ek ayarını devre dışı bırakabilirsiniz.

1

Aşağıdaki numarayı denedim, işe yaradı.

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


0

Bu profesyonel olmayan bir çözüm, eminim ... Ama metin görünümünün arkasına boş bir etiket koymak sorunu çözer.


1
bu bir çözüm değil =)
İlker Baltacı

0

Bu sadece benim için çalıştı (iOS 7'den edinilebilir)

[<#your UITextViewInstance#> setTextContainerInset:UIEdgeInsetsZero];
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.