我らが大好きUITextViewは、iOS7からたまに挙動がおかしくなると有名ですね(こっちの頭もおかしくなりそう)。それはNSLayoutManager周りが一新されたためなのですが、古いコードで動いているアプリだと、そのおかしな挙動に頭を悩まされます。そんな中の一つをメモとして残します。そう、自分のために。
スクロールできるくらいのテキストをあらかじめセットした状態で、最後の行の後ろにテキストを挿入しようとすると、TopにScrollされます。(ぶっ飛び怪奇現象)
↓こんな感じですね。
・「allowsNonContiguousLayout=YES」にした場合
これは、NSLayoutManagerのallowsNonContiguousLayoutがdefaultでtrueになっており、どうやらそれが今回の悪さをするようです。allowsNonContiguousLayoutをfalseにしてみると、怪奇現象はおきません。
・「allowsNonContiguousLayout=NO」にした場合
UITextView *textView = [UITextView new]; textView.delegate = self; textView.frame = CGRectMake(0, self.view.bounds.size.height/3, self.view.bounds.size.width, 100); textView.backgroundColor = [UIColor lightGrayColor]; textView.font = [UIFont systemFontOfSize:20]; textView.text = @"ABC\nD\nD\nD\nD\nD\nD\nD\nEFG"; // これを追加 // textView.layoutManager.allowsNonContiguousLayout = NO; [self.view addSubview:textView];
githubにもアップしておきました。自分のために。
https://github.com/hayakawatomoaki/iOS8_STextView
検索されやすいように英語でも書いておきます。
文法が間違っていても気にしません。
Scroll to top When tapped last line of UITextView…
上記、間違っていたら教えてくれると助かります。
ではでは。
Please comment with your real name using good manners.