chr*_*hrs 26 uitextview uikit ios ios7
更新 这似乎只是IOS 7的一个问题.已接受的答案已添加了一个很好的解决方法.
我创建了一个包含UITextView和UILabel的自定义控件,其中包含textview的标题,即我的控件.我的控件会自动更改大小以适应textview和标题.在此之前,我更改textview的大小以适合文本.这最佳地工作.
我添加了功能,因此textview会自动滚动到最后一行.或者这至少是我正在尝试的东西.只要最后一行包含除空文本之外的任何内容,它就可以正常工作.如果文本为空,则向下滚动,因此您只能看到光标的大约一半.
我究竟做错了什么?
所以你可以更好地理解我做了一些图像:
这是我输入一个单词并制作一些换行符.(仍然不足以让它滚动)

我做了一个休息时间.(按回车键)仔细查看光标如何减半.这是问题!

我已经拍了下一张照片,所以你可以看到我的预期.

dav*_*sdk 54
其他答案的问题:
解决方案是将其添加到文本视图委托:
- (void)textViewDidChange:(UITextView *)textView {
CGRect line = [textView caretRectForPosition:
textView.selectedTextRange.start];
CGFloat overflow = line.origin.y + line.size.height
- ( textView.contentOffset.y + textView.bounds.size.height
- textView.contentInset.bottom - textView.contentInset.top );
if ( overflow > 0 ) {
// We are at the bottom of the visible text and introduced a line feed, scroll down (iOS 7 does not do it)
// Scroll caret to visible area
CGPoint offset = textView.contentOffset;
offset.y += overflow + 7; // leave 7 pixels margin
// Cannot animate with setContentOffset:animated: or caret will not appear
[UIView animateWithDuration:.2 animations:^{
[textView setContentOffset:offset];
}];
}
}
Run Code Online (Sandbox Code Playgroud)
我试着把你的textViewDidChange:一个片段放进去:
if([textView.text hasSuffix:@"\n"])
[self.textView setContentOffset:CGPointMake(0,INT_MAX) animated:YES];
Run Code Online (Sandbox Code Playgroud)
它不是很干净,我正在努力寻找一些更好的东西,但现在它起作用了:D
更新:由于这是仅在iOS 7(Beta 5,现在)上发生的错误,您可以使用以下代码进行解决方法:
if([textView.text hasSuffix:@"\n"]) {
double delayInSeconds = 0.2;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
CGPoint bottomOffset = CGPointMake(0, self.textView.contentSize.height - self.textView.bounds.size.height);
[self.textView setContentOffset:bottomOffset animated:YES];
});
}
Run Code Online (Sandbox Code Playgroud)
然后,在iOS 6上,您可以选择将延迟设置为0.0或仅使用块的内容.
| 归档时间: |
|
| 查看次数: |
18506 次 |
| 最近记录: |