web-dev-qa-db-ja.com

iOS 10のUITextViewの上部にある空白スペース

UITextViewにテキストが含まれています。 iOS 6ではすべて問題ありませんでしたが、iOS 7では空白が上部に残り、テキストビューの中央の下にテキストが配置されます。enter image description here

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

116
Ali Sufyan

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

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

self.automaticallyAdjustsScrollViewInsets = NO
217
jrturton

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

jrturtonの答えは、それを解決する最もクリーンな方法でもありません。オーバーライドする必要はありません。複雑にしないでおく!

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

self.automaticallyAdjustsScrollViewInsets = NO;

viewDidLoadメソッドで。

ドキュメントをご覧ください: https://developer.Apple.com/documentation/uikit/uiviewcontroller/1621372-automaticallyadjustsscrollviewin

58
Dumoko

Interface Builderで、

  • UITextViewを含むView Controllerを選択します。
  • 属性インスペクターに移動します。
  • [スクロールビューのインセットを調整]のチェックを外します。
47
user2268026

これは私のために働いた

textView.textContainerInset = UIEdgeInsetsZero;  
textView.textContainer.lineFragmentPadding = 0;
37
Ravi Bihani

Interface Builderに移動します。

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

enter image description here

24
Aamir

これが本当の機能かどうかは本当に疑問に思います...この64ポイントの自動インセットは、View Controllerのビューのすべてのサブビューの深さがUIScrollViewまたはUITextViewである場合にのみ追加されます。たとえば、スクロールビューの後ろにビューを追加する場合(ここでは、ビューインブリケーションではなく、zバッファについて説明します)、この64ポイントのインセットは自動的に追加されません。

たとえば、次の図はインセットを追加します。

enter image description here

この場合、インセットは追加されません。

enter image description here

これは本当に奇妙に思えます…OSがビューの深さを見て、ビューを拡張すべきかどうかを判断するのはなぜですか?

10
MonsieurDart

以下を追加することで、UITextViewの上の空白スペースを削除できます。

yourTextView.textContainerInset = UIEdgeInsetsZero;
6
lberyouk

Swift(Xcode 6)で

 self.automaticallyAdjustsScrollViewInsets = false

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

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

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

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

理解する必要があるのは、これがナビゲーションバーに関連していることです。

  • コンテンツがNavigation Barの下にある場合、View Controllerが自動的にスクロールビューのインセットを調整するようにします(デフォルト)。
  • コンテンツがナビゲーションバーの下に表示されない場合(おそらくトップスペースの制約にトップレイアウトガイドを使用した場合)、他のほとんどの返信で説明したように、自動スクロールビューのインセット調整を無効にできます。
1
CodeStage

これは専門的ではない解決策だと思います...しかし、textviewの後ろに空白のラベルを置くだけで問題は解決します。

0
Terence

Swift 4の解決策:

textView.textContainerInset = UIEdgeInsets.zero
0

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

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