iOS 10のUITextViewの上部の空白


116

テキストが含まれているUITextViewがあります。すべてがiOS 6では問題ありませんでしたが、現在iOS 7では上部に空白が残され、テキストがテキストビューの中央の下に配置されます。ここに画像の説明を入力してください

contentOffSetを設定していません。助けてください!

回答:


217

テキストビューはスクロールビューです。ビューコントローラーは、ナビゲーションバーとステータスバーの後ろに上にスクロールすることを想定しているため、ビューをスクロールするためにコンテンツオフセットを自動的に追加します。

これを防ぐには、テキストビューを含むビューコントローラで次のプロパティを設定します。

self.automaticallyAdjustsScrollViewInsets = NO

7
これは、問題を修正する方法だけでなく、なぜそれが最初に発生するのかについても説明しているため、より適切な回答です。
Stephen Melvin

1
ところで、サブクラス化してオーバーライドする必要はありません。UITextViewをインスタンス化した後、automaticAdjustsScrollViewInsetsをNOに設定するだけです。
2013年

1
@leftspinは、ビューコントローラーをサブクラス化していない非常にまれなケースです。また、メソッドをオーバーライドすると、コードはiOSの下位バージョンでも機能します。プロパティを設定すると、最初に互換性チェックが必要になります。
jrturton 2013年

1
したがって、私のモデルビューコントローラーがUINavigationControllerの外にある場合、オフセットはクリアされますか?それはちょっとおかしいです...この動作は、私のテキストビューが上に配置されている場合にのみ正しく、それ以外の場合はゴミです... Appleがそのようなことをした理由を誰かが説明できますか?
Paul Brewczynski、2014年

@jrturtonこれは古い投稿であることをお詫びします。objective-cを初めて使用するので失礼しますが、これは現在、UIViewControllerのプロパティです...以前はメソッドでしたか?
Craig

58

IronManGillが示した現在の回答は、問題が最初に発生する理由の理解に基づいていないため、良い解決策ではありません。

jrturtonの答えも、それを解決するための最もクリーンな方法ではありません。オーバーライドする必要はありません。単純にする!

必要なのは、以下を設定することだけです。

self.automaticallyAdjustsScrollViewInsets = NO;

viewDidLoadメソッド内。

ドキュメントをチェックしてください:https : //developer.apple.com/documentation/uikit/uiviewcontroller/1621372-automaticallyadjustsscrollviewin


1
ストーリーボードに変更を加えると、場合によってはより良い場合があります。「Identity Inspector」->「User Defined Runtime Attributes」に移動し、そこに定義を追加します。
hufeng03 2015年

automaticallyAdjustsScrollViewInsets 廃止予定です。iOS11、使用からcontentInsetAdjustmentBehavior
・クール

47

Interface Builderでは、

  • UITextViewを含むビューコントローラーを選択します。
  • 属性インスペクターに移動します。
  • [スクロールビューインセットの調整]をオフにします。

これはios8での私のケースの最も簡単な解決策です
プラチナ2015

3
注:これはUIViewControllerのプロパティです。それを見つけることができず、テキストを完全に読んでいないことに気づいた
Maik639

37

これは私のために働いた

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

24

に行くInterface Builder

  1. view controllerあなたを含むものを選択text view
  2. Adjusts Scroll View Insetsプロパティのチェックを外します

ここに画像の説明を入力してください


これは私が探していたものでした。また、 'self.automaticallyAdjustsScrollViewInsets = false'をviewControllerに追加することで、これを行うことができます
CodeOverRide

これは、「このテキストが表示されないのはなぜですか」という検索をたまたま終わらせただけの優れた、まっすぐな答えです。
UpSampler 2017

10

これはこの64ポイント自動挿入画は、ときにのみ追加されます...本当の機能である場合、私は本当に不思議UIScrollViewUITextViewView Controllerのビューのすべてのサブビューの大きいの深さなど。たとえば、スクロールビューの後ろにビューを追加する場合(ここでは、ビューのインブリケーションではなく、Zバッファーについて話しています)、この64ポイントのインセットは自動的に追加されません。

たとえば、これははめ込みを追加します:

ここに画像の説明を入力してください

この場合、挿入図は追加されません。

ここに画像の説明を入力してください

これは本当に私には奇妙に思われます... OSがビューの深さを見て、ビューを拡張する必要があるかどうかを判断するのはなぜですか?



6

次の行をUITextView追加して、上部の空白を削除できます。

yourTextView.textContainerInset = UIEdgeInsetsZero;

5

この問題は、コンテンツオフセットを負の値に設定することで解決しました。これがSwiftコードです。

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

これは、インセットを維持し、半透明のバーの下で正しくスクロールする最良のソリューションでした。この変更を提案します。 [self.textView setContentOffset:CGPointMake(0.f, -self.topLayoutGuide.length) animated:NO];
InitJason 2017

1
これ以外は何もうまくいきませんでした。Swift、Xcode 9.1。
Ashok

1

あなたが理解しなければならないのは、これがナビゲーションバーに関連しているということです:

  • コンテンツがナビゲーションバーの下にある場合は、ビューコントローラーでスクロールビューインセットを自動的に調整します(デフォルト)。
  • コンテンツがナビゲーションバーの下にない場合(おそらく上部スペース制約に上部レイアウトガイドを使用しました)、他のほとんどの返信で述べられているように、自動スクロールビューインセット調整を無効にすることができます。

1

次のトリックを試しましたが、うまくいきました。

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


0

これは専門外のソリューションだと思います...しかし、テキストビューの後ろに空白のラベルを置くだけで問題は解決します。


1
これは解決策ではありません=)
Ilker Baltaci 2015年

0

これはちょうど私のために働いた(iOS 7から利用可能)

[<#your UITextViewInstance#> setTextContainerInset:UIEdgeInsetsZero];
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.