UITextViewにテキストが含まれています。 iOS 6ではすべて問題ありませんでしたが、iOS 7では空白が上部に残り、テキストビューの中央の下にテキストが配置されます。
ContentOffSetを設定しませんでした。助けてください!
テキストビューはスクロールビューです。ビューコントローラーは、ナビゲーションバーとステータスバーの後ろで上にスクロールすることを想定しているため、スクロールビューにコンテンツオフセットを自動的に追加します。
これを防ぐには、テキストビューを含むView Controllerで次のプロパティを設定します。
self.automaticallyAdjustsScrollViewInsets = NO
IronManGillの現在の答えは、問題が最初に発生する理由の理解に基づいていないため、良い解決策ではありません。
jrturtonの答えは、それを解決する最もクリーンな方法でもありません。オーバーライドする必要はありません。複雑にしないでおく!
必要なのは、以下を設定することです。
self.automaticallyAdjustsScrollViewInsets = NO;
viewDidLoadメソッドで。
ドキュメントをご覧ください: https://developer.Apple.com/documentation/uikit/uiviewcontroller/1621372-automaticallyadjustsscrollviewin
Interface Builderで、
これは私のために働いた
textView.textContainerInset = UIEdgeInsetsZero;
textView.textContainer.lineFragmentPadding = 0;
これが本当の機能かどうかは本当に疑問に思います...この64ポイントの自動インセットは、View Controllerのビューのすべてのサブビューの深さがUIScrollView
またはUITextView
である場合にのみ追加されます。たとえば、スクロールビューの後ろにビューを追加する場合(ここでは、ビューインブリケーションではなく、zバッファについて説明します)、この64ポイントのインセットは自動的に追加されません。
たとえば、次の図はインセットを追加します。
この場合、インセットは追加されません。
これは本当に奇妙に思えます…OSがビューの深さを見て、ビューを拡張すべきかどうかを判断するのはなぜですか?
以下を追加することで、UITextView
の上の空白スペースを削除できます。
yourTextView.textContainerInset = UIEdgeInsetsZero;
Swift(Xcode 6)で
self.automaticallyAdjustsScrollViewInsets = false
コンテンツオフセットを負の値に設定することで、この問題を解決しました。これがSwiftコードです。
yourTextView.setContentOffset(CGPoint(x: 0, y: -150), animated: true)
次のトリックを試してみましたが、うまくいきました。
- (void)viewDidLoad{
self.textView.scrollEnabled = NO;
}
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
self.textView.scrollEnabled = YES;
}
理解する必要があるのは、これがナビゲーションバーに関連していることです。
これは専門的ではない解決策だと思います...しかし、textviewの後ろに空白のラベルを置くだけで問題は解決します。
Swift 4の解決策:
textView.textContainerInset = UIEdgeInsets.zero
これはちょうど私のために働いた(iOS 7から利用可能)
[<#your UITextViewInstance#> setTextContainerInset:UIEdgeInsetsZero];