5

UITextViewiOS 7 で、自動レイアウトを使用して、プログラムで sを作成してきました。次のようなものです。

_textView = [UITextView new];
_textView.translatesAutoresizingMaskIntoConstraints = NO;
_textView.font = [UIFont systemFontOfSize:18.0];
_textView.delegate = self;
[self.view addSubview:_textView];

作成した他の制約に加えて、テキスト ビューの下部に次の制約があります。

_textViewBottomConstraint = 
       [NSLayoutConstraint constraintWithItem:_textView
                                                     attribute:NSLayoutAttributeBottom
                                                     relatedBy:NSLayoutRelationEqual
                                                        toItem:self.bottomLayoutGuide
                                                     attribute:NSLayoutAttributeTop
                                                    multiplier:1.0
                                                      constant:0.0];

[self.view addConstraint:_textViewBottomConstraint];

キーボードが表示されたときに制約を変更できるように:

- (void)keyboardDidShow:(NSNotification*)sender
{
    CGRect keyboardFrame = 
                        [sender.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
    CGRect convertedFrame = 
                        [self.view convertRect:keyboardFrame fromView:self.view.window];
    _textViewBottomConstraint.constant = -convertedFrame.size.height;
    [_textView layoutIfNeeded];
}

それはすべてうまくいっています...

問題

私は Xcode 6 と iOS 8 に切り替えたばかりです (遅く、私は知っています) UITextView。例 (テキストビューの背景は黄色):

ここに画像の説明を入力

インセットの原因は何ですか?と に接続されNSTextContainerていtextContainerInsetますか?

  • iOS 7以降での作業とNSTextContainer正しい使用方法はありますか?textContainerInsetUITextView
  • iOS 8でそのようにする必要があります

はいの場合、必要なandUITextViewとともにプログラムで a を作成するためのガイダンスをいただければ幸いです。その後設定。(プログラムで自動レイアウトを使用します)。NSTextContainerNSLayoutManagertextContainerInset

ありがとう。

4

2 に答える 2

7

contentInsetからですUIViewController

iOS 8 では、 myが myUITextView内にUIViewControllerあるため、明示的に設定する必要があるようです。

self.automaticallyAdjustsScrollViewInsets = NO;

明示的に設定せずに、iOS 7 を実行している物理的な iPhone 5s と iOS 8 を実行している Simulator iPhone 5s の違いを確認しました。

textContainerInsetcontentInsetおよびの上位の値を確認するログ出力を次に示しますscrollIndicatorInset。いずれの場合も、 と の後viewDidLoadkeyboardDidShow.

iOS 7 を実行している iPhone 5s デバイス:

2014-09-12 07:55:01.244 Alter[19147:60b] viewDidLoad
2014-09-12 07:55:01.249 Alter[19147:60b] textContainerInset Top: 8.000000
2014-09-12 07:55:01.252 Alter[19147:60b] contentInset Top: 0.000000
2014-09-12 07:55:01.253 Alter[19147:60b] scrollIndicatorInset Top: 0.000000

2014-09-12 07:55:02.515 Alter[19147:60b] keyboardDidShow
2014-09-12 07:55:02.516 Alter[19147:60b] textContainerInset Top: 8.000000
2014-09-12 07:55:02.516 Alter[19147:60b] contentInset Top: 0.000000
2014-09-12 07:55:02.516 Alter[19147:60b] scrollIndicatorInset Top: 0.000000

iOS 8 を実行するシミュレータ iPhone 5s (または 6、または 6 Plus) :

2014-09-12 07:55:39.395 Alter[2120:109535] viewDidLoad
2014-09-12 07:55:39.395 Alter[2120:109535] textContainerInset Top: 8.000000
2014-09-12 07:55:39.396 Alter[2120:109535] contentInset Top: 0.000000
2014-09-12 07:55:39.396 Alter[2120:109535] scrollIndicatorInset Top: 0.000000

2014-09-12 07:55:39.939 Alter[2120:109535] keyboardDidShow
2014-09-12 07:55:39.939 Alter[2120:109535] textContainerInset Top: 8.000000
2014-09-12 07:55:39.939 Alter[2120:109535] contentInset Top: 64.000000
2014-09-12 07:55:39.939 Alter[2120:109535] scrollIndicatorInset Top: 64.000000

私自身の質問に答えるために、とを手動でセットアップする必要はありません。このアプローチの使用を開始する方がよいかもしれませんが、親ビュー コントローラーでこれを設定すると、フレームを調整するオプションがあります。NSTextContainerNSLayoutManagertextContainerInset

self.automaticallyAdjustsScrollViewInsets = NO;
于 2014-09-12T07:13:18.793 に答える